全面解析Js数组遍历对原数组的影响及返回值

概述

本文主要是测试Js中遍历方法对原数组的影响及方法的返回值。

测试用到的代码地址github.com/fanxuewen/e…

一、遍历

1.map和forEach

验证对原数组的影响及返回值

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);
复制代码

结果:map和forEach都不改变原数组,map返回一个新数组,forEach没有返回值

验证执行效率

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');
复制代码

结果:forEach的执行效率比map稍微高一些

2.some和every及filter

验证对原数组的影响及返回值

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);
复制代码

结果:三者都不改变原数组,filter返回满足条件的新数组,some和every返回bool值,some只要y有满足条件的项就返回True,every要全部满足判定条件才会返回true

验证是否可以中断循环

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时立即退出

经过以上测试得知
1.所有遍历方法都不会影响原数组
2.map和filter会返回一个新的数组
3.forEach没有返回值
4.some和every返回bool值且能提前中断循环

转载于:https://juejin.im/post/5caec65e5188251ae4157497

你可能感兴趣的:(全面解析Js数组遍历对原数组的影响及返回值)