有时,我们需要迭代数组中的元素。可以使用循环语句来处理,例如for
语句。
JavaScript
内置了很多数组可用的迭代方法。
我们先写一点基础代码:
function isEven(x) {
// 如果x是2的倍数,就返回true
console.log(x);
return x % 2 === 0;
}
let numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
我们写了一个判断奇偶的函数,isEven
。
如果是x
是2的倍数,就返回true
,否则就返回false
。
ok,下面我们开始介绍各种用于迭代数组的函数。
用every方法迭代
我们要尝试的第一个方法是every
。every
方法会迭代数组中的每个元素,知道返回false
。
numbers.every(isEven);
在这个例子里,数组numbers
的第一个元素是1,它不是2的倍数,因为isEven
函数返回false
,然后every
执行结束。
用some方法迭代
下一步,我们来看some
方法,它和every
的行为相反,会迭代数组中的每个元素,直到函数返回true
。
numbers.some(isEven);
在我们的例子里,numbers
数组中第一个偶数是2(第二个元素)。第一个被迭代的元素是1,isEven
会返回false
。第二个被迭代的元素是2,isEven
返回true
——迭代结束。
用forEach方法迭代
如果要迭代整个数组,可以用forEach
方法。它和使用for
循环的结果相同。
numbers.forEach(x => console.log(x % 2 === 0));
用map和filter方法迭代
JavaScript
还有两个会返回新数组的迭代方法。第一个是map
。
const myMap = numbers.map(isEven);
数组myMap
里的值是:[false,true,false,true,false,true,false,true,false,true,false,true,false,true,false]
。
它保存了传入map
方法的isEven
函数的运行结果。这样就很容易知道一个元素是否是偶数。比如,myMap[0]
是false
,因为1不是偶数;而myMap[1]是true
,所以2是偶数。
还有一个filter
方法,它返回的新数组由使函数返回true
的元素组成。
const evenNumbers = numbers.filter(isEven);
在我们的例子里,evenNumbers
数组红的元素都是偶数:[2,4,6,8,10,12,14]
。
使用reduce方法
最后是reduce
方法。reduce
方法接收一个有如下四个参数的函数:previousValue
、currentValue
、index
和array
。因为index
和array
是可选的参数,所以如果用不到它们的话,可以不传。这个函数会返回一个将被叠加到累加器的值,reduce
方法停止执行后会返回这个累加器。如果要对一个数组中的所有元素求和,这就很有用。下面是一个例子。
numbers.reduce((previous,current) => previous + current);
输出将是120。
我们上面讲述了很多关于数组可用的迭代函数,完成了一开始写的需求,因篇幅限制,我无法详细介绍各个函数,如果想了解详细的内容,可以查一下MDN
的文档,