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报错
                    
                
                
            
        
浙公网安备 33010602011771号