本文主要是测试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