ECMAScript为数组定义了5个迭代方法。每个方法接收两个参数:以每一项为参数运行的函数,以及可选的作为函数运行上下文的作用域对象(影响函数中this的值)。传给每个方法的函数接收3个参数:数组元素、元素索引和数组本身。
- forEach()方法
不改变原数组,没有返回值,对数组每一项运行传入的函数,本质上forEach()方法相当于使用for循环遍历数组。
eg:
let numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
number.forEach((item, index, array) => {
//执行某些操作
});
- map()方法
不改变原数组,返回一个新数组,对数组每一项运行传入的函数,新数组中的每一项都是对原始数组中同样位置运行传入函数而返回的结果。
eg:
let numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
let mapResult = numbers.map((item, index, array) => item * 2);
alert(mapResult);// [2, 4, 6, 8, 10, 8, 6, 4, 2]
- filter()方法
不改变原数组,返回一个新数组,对数组每一项运行传入的函数,函数返回true的项会组成数组之后返回。这个方法主要用于从数组中筛选满足给定条件的元素。
eg:
let numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
let filterResult = numbers.filter((item, index, array) => item > 2);
alert(filterResult); // [3, 4, 5, 4, 3]
- some()方法和every()方法
不改变原数组,返回布尔值。对于some()方法来说,对数组每一项运行传入的函数,只要有一项让传入的函数返回true,它就会返回true;对于every()方法来说,对数组每一项运行传入的函数,每一项都让传入的函数返回true,它才会返回true。
eg:
let numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
let someResult = numbers.some((item, index, array) => item > 2);
alert(someResult) // true
let everyResult = numbers.every((item, index, array) => item > 2);
console.log(everyResult) // false