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

概述

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

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

1、遍历

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没有返回值

验证执行效率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');
复制代码

结果: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

验证是否能够中断循环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

相关文章
相关标签/搜索