javascript 遍历数组的性能比较
常用的数组遍历方法有for,foreach,for in ,for of ,map,some,filter,reduce等,后面3个还没写进去哈,另外浏览器安装的不是很多,后续可以更全面点。
这里只简单列举几个数据,更严谨的方法应该是每种方法使用一定数据量来修正,但是这次目的并不是为了得出准确的平均值,只是为了比较。
代码:
function byFor(arr) {
var tb=new Date().getTime();
for(var i=0;i<arr.length;i++){
arr[i]=i+1;
}
var te=new Date().getTime();
console.log(byFor Time:+(te-tb))
}
function byForLength(arr) {
var tb=new Date().getTime();
var l=arr.length;
for(var i=0;i<l;i++){
arr[i]=i+1;
}
var te=new Date().getTime();
console.log(byForLength Time:+(te-tb))
}
function byMap(arr) {
var tb=new Date().getTime();
arr.map(item=>{
return item+1;
});
var te=new Date().getTime();
console.log(byMap Time:+(te-tb))
}
function byForIn(arr) {
var tb=new Date().getTime();
for(var i in arr){
arr[i]=i+1;
}
var te=new Date().getTime();
console.log(byForIn Time:+(te-tb))
}
function byForeach(arr) {
var tb=new Date().getTime();
arr.forEach(i=>{
arr[i]=i+1;
});
var te=new Date().getTime();
console.log(byForeach Time:+(te-tb))
}
function byForOf(arr) {
var tb=new Date().getTime();
for(var value of arr){
arr[0]=value;
}
var te=new Date().getTime();
console.log(byForOf Time:+(te-tb))
}
function getArrByFor(num) {
var arr=[];
var tb=new Date().getTime();
for(var i=0;i<num;i++){
arr.push(i);
}
var te=new Date().getTime();
console.log(num+ getArrByFor Time :+(te-tb));
return arr;
}
// 获得1000数量级的数组
var arr_1000=getArrByFor(1000);
byFor(arr_1000);
byForLength(arr_1000);
byForIn(arr_1000);
byMap(arr_1000);
byForOf(arr_1000);
byForeach(arr_1000);
// 获得100000数量级的数组
var arr_100000=getArrByFor(100000);
byFor(arr_100000);
byForLength(arr_100000);
byForIn(arr_100000);
byMap(arr_100000);
byForOf(arr_100000);
byForeach(arr_100000);
// 获得100000 数量级的数组
var arr_100=getArrByFor(1000000);
byFor(arr_100);
byForLength(arr_100);
byForIn(arr_100);
byMap(arr_100);
byForOf(arr_100);
byForeach(arr_100);
运行结果
chorm:
360:
opera:
edge:
for in不管在哪个数量级,哪个浏览器中,效率是最低的,从表格可以粗略看出,
for和加强版的for除了在ie中,其他都相差不多,应该是浏览器做过优化
for in和for of的效率并没有for好,而map 表现一般
ie下的for循环和foreach是有性能区别的,如果说循环体里还有其他操作,这个时间量级可能会翻天覆地
