某日。 Code Review 。 某老大:你这个不能用 find 啊,这函数性能太差了。 我:性能差?
let arr=[];
for(let i=0;i<=1000000;i++){
arr.push('abcdefghigk'+i);
}
let v0='abcdefghigk'+parseInt(Math.random()*1000000,10);//比较随机值
let v1='abcdefghigk1000000';//比较最后一个
console.warn('get random value:',v0);
console.log('for in :');//for in 方式查询
console.time('arr');
let find =false;
for(let i in arr){
if(arr[i]===v0){
find=true;
break;
}
}
console.timeEnd('arr');
console.log('for i++:');//for i++方式查询
console.time('arr');
find =false;
for(let i=0,len=arr.length;i<len;i++){
if(arr[i]===v0){
find=true;
break;
}
}
console.timeEnd('arr');
console.log('Array.find:');//join 方式查询
console.time('arr');
find = arr.find(item=>item===v0)
console.timeEnd('arr');
console.warn('get max value:',v1);
console.log('for in :');//for in 方式查询
console.time('arr');
find =false;
for(let i in arr){
if(arr[i]===v1){
find=true;
break;
}
}
console.timeEnd('arr');
console.log('for i++:');//for i++方式查询
console.time('arr');
find =false;
for(let i=0,len=arr.length;i<len;i++){
if(arr[i]===v1){
find=true;
break;
}
}
console.timeEnd('arr');
console.log('Array.find:');//join 方式查询
console.time('arr');
find = arr.find(item=>item===v1)
console.timeEnd('arr');
get random value: abcdefghigk275952
for in :
arr: 157.901123046875ms
for i++:
arr: 7.884033203125ms
Array.find:
arr: 7.52099609375ms
get max value: abcdefghigk1000000
for in :
arr: 223.169921875ms
for i++:
arr: 7.137939453125ms
Array.find:
arr: 18.552001953125ms
我实在是不太清楚大佬说的 find 性能差的原因和理由在哪。 谁来把我打清醒。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.