JavaScript还有两个会返回新数组的遍历方法。第一个是 map:
var myMap = number.map(isEven); myMap // [false, true, false, true, false, true, false, true, false, true, false, true, false, true, false]从上面代码可以看出,myMap保存了传入 map 方法的 isEven函数运行的结果。这样就可以很容易知道一个元素是否偶数。
还有一个filter方法,它返回的新数组由使函数返回 true 的元素组成:
var evenNumbers = number.filter(isEven); evenNumbers // [2, 4, 6, 8, 10, 12, 14] reducereduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
语法
array.reduce(function(total, currentValue, currentIndex, arr), initialValue) 参数 描述total 必需。初始值, 或者计算结束后的返回值。
currentValue 必需。当前元素
currentIndex 可选。当前元素的索引
arr 可选。当前元素所属的数组对象。
如果要对一个数组中所有元素进行求和,这就很有用
number.reduce(function(total,currentValue,index){ return total + currentValue; }); // 120 ES6 和数组的新功能下表是ES6/7新增的数组方法
方法 描述@@iterator 返回一个包含数组键值对的迭代器对象,可以通过同步调用得到数组元素的键值对
copyWithin 复制数组中一系列元素到同一数组指定的起始位置
entries 返回包含数组所有键值对的@@iterator
includes 如果数组中存在某个元素则返回 true,否则返回false,ES7新增
find 根据回调函数给定的条件从数组中查找元素,如果找到就返回该元素
findIndex 根据回调函数给定的条件从数组中寻找元素,如果找到就返回该元素在数组中的索引
fill 用静态值填充数组
from 根据已有数组创建一个新数组
keys 返回包含数组所有索引的@@iterator
of 根据传入的参数创建一个新数组
values 返回包含数组中所有值的@@iterator
除了这些新的方法,还有一种用 for... of循环来迭代数组的新做法,以及可以从数组实例得到的迭代器对象。
使用 forEach 和箭头函数箭头函数可以简化使用 forEach迭代数组元素的做法
number.forEach(function(x){ console.log (x % 2 == 0); }) // 等于 number.forEach(x => { console.log(x % 2 == 0); }); 使用 for...of 循环迭代 for(let n of number){ console.log(n % 2 == 0); } 使用ES6新的迭代器(@@iterator)ES6还为 Array 类增加了一个 @@iterator 属性,需要通过 Symbol.iterator来访问。
let iterator = number[Symbol.iterator](); console.log(iterator.next().value); // 1 console.log(iterator.next().value); // 2 console.log(iterator.next().value); // 3 console.log(iterator.next().value); // 4 console.log(iterator.next().value); // 5 console.log(iterator.next().value); // 6因为number数组中有15个值,所以需要调用15次 iterator.next().value ,数组中所有值都迭代完之后,就会返回 undefined。
数组的 entries、keys 和 values 方法
ES6还增加了三种从数组中得到迭代器的方法。
entries 方法返回包含键值对的 @@iterator
let aEntries = number.entries(); // 得到键值对的迭代器 console.log(aEntries.next().value); // [0,1] -- 位置0的值为1 console.log(aEntries.next().value); // [1,2] -- 位置1的值为2 console.log(aEntries.next().value); // [2,3] -- 位置2的值为3number 数组中都是数字,key是数组中的位置,value是保存在数组中索引的值
使用集合、字段、散列表等数据结构时,能够取出键值对是很有用的。后面会详细讲解。