ES6的数组的迭代方法

ES6数组的迭代方法一共有8个,每个方法的参数都是一个函数

1.map

转换,把一种数据转换成另外一种数据

map返回一个新数组,新数组里的元素跟原数组一一对应

回调函数签名:

function(item/*数组的每一个元素*/,index/*元素的下标*/,arrSelf/*数组自身*/){
      return item*2;//转换完以后的数据;任意数据      
}

例子:

let a = [1,2,3];
let b = a.map(function(item,index,arrSelf){
                return item**2
           });
console.log(b);//[1,4,9]

2.forEach 

为每一个元素执行一个操作(和遍历有关)

参数是一个函数,返回值没有(undefined)

回调函数的签名形式:

function(item,index,arrSelf){
     ...//不需要返回值      
}

例子1:打印元素

let arr = ['a','b','c','d'];
arr.forEach(function(item){
   console.log(item);//a,b,c,d
});

例子2:改变原数组

let arr = [1,2,3];
arr.forEach(function(item,index){
       arr[index] = arr[index]*2;
});
console.log(arr);//被改变[1,4,6]

filter、find、findIndex、some、every的回调函数签名:

function(item,index,arrSelf){
     return true/false;//返回布尔值  
}

3.filter

将数组里所有符合条件的元素筛选出来,组成新的数组并返回,没有返回一个空数组

例子:

const words = ['map','forEach','filter','find','findIndex','some','every','reduce'];
function fn(item){
   //目标长度大于等于6并且含有d字符的元素
   return item.length >= 6 && item.indexOf('d') > -1;
}
const result = words.filter(fn);
console.log(result);//["findIndex", "reduce"]

 4.find

返回数组第一个符合条件的元素,没有返回undefined

例子:

const item = words.find(function(item){
                           //for循环里的break
                           return item.length === 4;
                    })
console.log(item);// find

5.findIndex

返回数组第一个符合条件元素的索引(下标),没有返回-1

例子:

const index = words.findIndex(function(item){
                              return item.length === 4;
                    });
console.log(index);//  3

6.some

返回值是布尔类型,回调函数检查每个元素,如果任何一个返回true,整体结果就是true;如果所有的结果都是false,返回结果为false

例子:

function fn(item){
   return item.length >= 6 && item.indexOf('d') > -1
}
console.log(words.some(fn));//true

7.every 

返回值是布尔类型,回调函数检查每一个元素,如果任何一个返回false,整体结果就是false,如果所有的结果都是true,返回结果为true

例子:

function fn(item){
    return item.length >= 6 && item.indexOf('d') > -1;  
}
console.log(words.every(fn));//false

8.reduce

初始状态 state

每次都把上一次的状态和数组(item)的每一项计算出下一个状态

reduce 返回值是最后一次运算的结果 state

reduce 需要的回调函数签名:

function ((state,item,index,arrSelf)){
    ...
    return nexState;
}

reduce(callbackFn,initstate/*可省略*/,this)

例子:

let arr = [1,2,3];
function sum(arr){
    let x = arr.reduce(function(state,item){
    let nextState = state+item;
    return nextState;

},0)
console.log(x);
}

注意:如果不写initstate参数,reduce用arr[0]作为初始的state,并且会迭代从下标1开始;sum: 0  1,

1  2,

3  3,

6;

当不给初始值时

sum:1  2,

3  3,

6;

没有报错,但当只有一个元素时,不传参直接输出,为空数组时,sum报错

posted @ 2021-09-12 19:04  YEZI32  阅读(226)  评论(0)    收藏  举报