# 数组遍历总结

# for()

基本方法,有遍历条件,当数组较大时优化效果才会比较明显。

for (let i = 0; i < arr.length; i++) { 
    console.log(i)
}

# forEach()

遍历,对数组中的每一项运行给定函数。可修改原数组,没有返回值。

参数:当前值,索引值,原数组

let arr = [1, 2, 3, 4, 5];
arr.forEach((item, index, array) => {
    console.log(item + '|' + index + '|' + (array === arr));
});
// 1|0|true
// 2|1|true
// 3|2|true
// 4|3|true
// 5|4|true

# for of()

可以正确响应breakcontinuereturn语句

let arr = [2, 6, 22, 45, 134]
for (let i of arr) {
    if(i > 30) break;
    console.log(i);
}
// 2, 6, 22

# filter()

过滤,不会改变原始数组,返回新数组

参数:当前值,索引值,原数组

let arr = [
  { id: 1, text: 'aa', done: true },
  { id: 2, text: 'bb', done: false }
]
let newArr = arr.filter(item => item.done);
console.log(newArr)  // [{ id: 1, text: 'aa', done: true }]
 
let arr = [73, 84, 56, 22, 100]
let newArr = arr.filter(item => item > 80) 
console.log(arr, newArr)     // [73, 84, 56, 22, 100], [84, 100]

# map()

指“映射”,对数组中的每一项运行给定函数,返回新数组。

参数:当前值,索引值,原数组

let arr = [1, 2, 3, 4, 5];
let arr2 = arr.map( function( item, index, array ){
    return item * item;
});
console.log(arr);   // [1, 2, 3, 4, 5]
console.log(arr2);   // [1, 4, 9, 16, 25]

# some()

对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true

参数:当前值,索引值,原数组

let arr = [ 1, 2, 3, 4, 5, 6 ];
let newArr = arr.some( function( item, index, array ){
    return item > 3;
})
console.log( newArr )   // true

# every()

对数组中的每一项运行给定函数,如果该函数对每一项返回true,则返回true

参数:当前值,索引值,原数组

some相反

let arr = [ 1, 2, 3, 4, 5, 6 ];
let newArr1 = arr.every(( item, index, array ) => item > 3 );
let newArr2 = arr.every(( item, index, array ) => item > 0 );
console.log( newArr1, newArr2 );    // false, true

# find()

找出第一个符合条件的数组成员,如果没有符合条件的成员,则返回undefined。

参数:当前值,索引值,原数组

let arr = [ 1, 2, 3, 4, 5, 6 ];
arr.find(i => {
    i > 2
})
// 3

# findIndex()

与find方法非常类似,返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1。

let arr = [ 1, 2, 3, 4, 5, 6 ];
arr.findIndex(i => {
    i > 2
})
// 2