JS高级用法系列

数组扁平化处理

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);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值