最快循环10万个长度的数组 有比 for循环 快的吗?

let arr = [20,19,30,50,。。。。] // 长度是10万
// 把每一项都减去7 ,怎么最快的计算如下转换? 有什么奇淫巧技吗 ,位运算之类的 byteArray 长度10万 以上 的图片数据

                          let byteArray = new Uint8Array(arrayBuffer);
                          let newByteArray =  new Array(byteArray.length);
                          for(let i = 0 ;i < byteArray.length;i++){
                              newByteArray[i] = byteArray[i] - 7
                          }
                          let arrayBuffer2 = new Uint8Array(newByteArray)
                          
                          
阅读 2.8k
2 个回答
let byteArray = new Array(1000000).fill(20);

console.time('byteArray');
let newByteArray = new Array(byteArray.length);
for (let i = 0; i < byteArray.length; i++) {
  newByteArray[i] = byteArray[i] - 7;
}
console.timeEnd('byteArray');

console.time('byteArray1');
let newByteArray1 = Array.from(byteArray, v => v - 7);
console.timeEnd('byteArray1');

console.time('byteArray2');
let newByteArray2 = byteArray.map(v => v - 7);
console.timeEnd('byteArray2');

console.time('byteArray3');
let newByteArray3 = eval('([' + byteArray.join('-7,') + '])');
console.timeEnd('byteArray3');

做了几个尝试,除了map的成绩跟for相比接近,其他都有明显差距

知道数组长度的话,可以把数组拆成多个子数组,多线程同步进行计算,最后把结果拼接起来

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏