为什么我要放弃javaScript数据结构与算法(第二章)—— 数组 (3)

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] reduce

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

语法

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的值为3

number 数组中都是数字,key是数组中的位置,value是保存在数组中索引的值

使用集合、字段、散列表等数据结构时,能够取出键值对是很有用的。后面会详细讲解。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgfwyw.html