本文主要是測試Js中遍歷方法對原數組的影響及方法的返回值。git
測試用到的代碼地址github.com/fanxuewen/e…github
驗證對原數組的影響及返回值數組
let originalArr=[1,2,3,4,5,6,7,8,9,10];
console.log('------------map---------------');
let arrMap= originalArr.map(item=>{
return item*2;
})
console.log('original',originalArr);
console.log('result',arrMap);
console.log('------------forEach---------------');
let arrForEach=originalArr.forEach(item=>{
return item*2;
})
console.log('original',originalArr);
console.log('result',arrForEach);
複製代碼
驗證執行效率bash
let originalArr=[];
for(let i=0;i<1000000;i++){
originalArr.push(i);
}
console.time('forEach')
originalArr.forEach(item=>{
return item*2;
})
console.timeEnd('forEach');
console.time('map')
originalArr.map(item=>{
return item*2;
})
console.timeEnd('map');
複製代碼
驗證對原數組的影響及返回值測試
let originalArr=[1,2,3,4,5,6,7,8,9,10];
console.log('------------filter---------------');
let arrFilter= originalArr.filter(item=>{
return item>2;
});
console.log('original',originalArr);
console.log('result',arrFilter);
console.log('------------some---------------');
let arrSome=originalArr.some(item=>{
return item>2;
})
console.log('original',originalArr);
console.log('result',arrSome);
console.log('------------every---------------');
let arrEvery=originalArr.every(item=>{
return item>2;
})
console.log('original',originalArr);
console.log('result',arrEvery);
複製代碼
驗證是否能夠中斷循環ui
let originalArr=[1,2,3];
console.log('------------filter---------------');
let arrFilter= originalArr.filter((item,index)=>{
console.log(item);
if(index==1){
return false;
}
return true;
});
console.log('original',originalArr);
console.log('result',arrFilter);
console.log('------------some---------------');
let arrSome=originalArr.some((item,index)=>{
console.log(item);
if(index==1){
return false;
}
return true;
})
console.log('original',originalArr);
console.log('result',arrSome);
console.log('------------every---------------');
let arrEvery=originalArr.every((item,index)=>{
console.log(item);
if(index==1){
return false;
}
return true;
})
console.log('original',originalArr);
console.log('result',arrEvery);
複製代碼
結果:filter不會提早退出循環,只是當return爲false時,相應的項不會出如今新返回的數組裏面,而some和every都有可能提早退出循環,當some遇到 return 爲true時立馬退出循環,every遇到 return爲false時當即退出spa
通過以上測試得知
1.全部遍歷方法都不會影響原數組
2.map和filter會返回一個新的數組
3.forEach沒有返回值
4.some和every返回bool值且能提早中斷循環3d