数组扁平化处理
Array.prototype.flat = function () {
const result = this.map((item) => {
if (Array.isArray(item)) {
return item.flat();
} else {
return [item];
}
});
return [].concat(...result);
};
Array.prototype.flat2 = function() {
let result = this;
// some 只要里面有一个是成立的 就要处理 寻找数组中有数组元素的值
while(result.some(item=>Array.isArray(item))){
result = [].concat(...result);
}
return result;
}
2、导入各个接口文件
2、创建一个js文件,汇总各api
const API = {};
// 动态导入各个接口文件
const context = require.context('./path/to/your/api/files', false, /\.js$/);
context.keys().forEach((key) => {
const apiModule = context(key);
const apiName = key.replace(/\.\/|\.js/g, '');
API[apiName] = apiModule.default;
});
3、二分法查找价格区间的计算
二分算法有个特点,必须是有序的,才能用二分。
下面例子:例如1-10件就是10块,11-20件就是9块,打折,1到10件就是10块一件,11到20就是9块一件,然后输入目标数,执行输出匹配值没有找到就-1,大于最大的就直接输出最后一个,买多少件返回当前件匹配的价格。
// 模拟生成长度为 10W 的数组
const array = []
let c = 0
for (let i = 0; i < 10000000; i++) {
c = c + 10
array.push({
min: c + 1,
max: c + 10,
unitPrice: i
})
}
function findUnitPriceBinary(number, array) {
// 二分查找方法
let start = 0;
let end = array.length - 1;
let result = -1;
while (start <= end) {
const mid = Math.floor((start + end) / 2);
if (number >= array[mid].min && number <= array[mid].max) {
return array[mid].unitPrice;
} else if (number < array[mid].min) {
// 当目标数字小于当前中间位置的最小值时,应将结束位置设为 mid - 1
end = mid - 1;
} else {
// 否则,应将开始位置设为 mid + 1,并记录结果
start = mid + 1;
result = array[mid].unitPrice;
}
}
return result
}
// 测试二分查找方法的执行耗时
const startTimeBinary = new Date().getTime();
const resultBinary = findUnitPriceBinary(1, array);
const endTimeBinary = new Date().getTime();
const elapsedTimeBinary = endTimeBinary - startTimeBinary;
console.log('二分查找方法耗时:', elapsedTimeBinary, 'ms');
console.log('二分查找方法结果:', resultBinary);