一、迭代器方法

在ES6中,Array的原型上提供了三个用于检索数组内容的方法:keys()、values()和entries()。keys()返回数组索引的迭代器,values()返回数组元素的迭代器,而entries()返回索引/值对的迭代器:

  1. let a = [1, 2, 3, 4, 5];
  2. let b = ['html', 'css', 'js', 'vue', 'react'];
  3. // 输出数组索引,并用Array.from方法转化为数组
  4. const a1 = Array.from(a.keys())
  5. // 输出数组元素,并用Array.from方法转化为数组
  6. const a2 = Array.from(a.values())
  7. // 输出数组元素键值对,并用Array.from方法转化为数组
  8. const a3 = Array.from(a.entries())
  9. console.log(a1); // [ 0, 1, 2, 3, 4 ]
  10. console.log(a2); // [ 1, 2, 3, 4, 5 ]
  11. console.log(a3); // [ [ 0, 1 ], [ 1, 2 ], [ 2, 3 ], [ 3, 4 ], [ 4, 5 ] ]

使用 ES6 的解构可以非常容易地在循环中拆分键/值对 :

  1. let b = ['html', 'css', 'js', 'vue', 'react'];
  2. tips:这里不能用for in 循环,只能用for of
  3. for (let [index, value] of b.entries()) {
  4. console.log(index);
  5. console.log(value);
  6. }
  7. 0
  8. html
  9. 1
  10. css
  11. 2
  12. js
  13. 3
  14. vue
  15. 4
  16. react

二、复制和填充方法

ES6 新增了两个方法:批量复制方法 copyWithin(),以及填充数组方法 fill()。这两个方法的 函数签名类似,都需要指定既有数组实例上的一个范围,包含开始索引,不包含结束索引。使用这个方 法不会改变数组的大小。

  1. const zeroes = [0, 0, 0, 0, 0];
  2. // 用 5 填充整个数组
  3. zeroes.fill(5);
  4. console.log(zeroes); // [5, 5, 5, 5, 5]
  5. zeroes.fill(0); // 重置
  6. // 用 5 填充整个数组
  7. zeroes.fill(5);
  8. console.log(zeroes); // [5, 5, 5, 5, 5]
  9. zeroes.fill(0); // 重置
  10. // 用 7 填充索引大于等于 1 且小于 3 的元素
  11. zeroes.fill(7, 1, 3);
  12. console.log(zeroes); // [0, 7, 7, 0, 0];
  13. zeroes.fill(0); // 重置
  14. // 用 8 填充索引大于等于 1 且小于 4 的元素
  15. // (-4 + zeroes.length = 1)
  16. // (-1 + zeroes.length = 4)
  17. zeroes.fill(8, -4, -1);
  18. console.log(zeroes); // [0, 8, 8, 8, 0];
  19. fill()静默忽略超出数组边界、零长度及方向相反的索引范围:
  20. const zeroes = [0, 0, 0, 0, 0];
  21. // 索引过低,忽略
  22. zeroes.fill(1, -10, -6);
  23. console.log(zeroes); // [0, 0, 0, 0, 0]
  24. // 索引过高,忽略
  25. zeroes.fill(1, 10, 15);
  26. console.log(zeroes); // [0, 0, 0, 0, 0]
  27. // 索引反向,忽略
  28. zeroes.fill(2, 4, 2);
  29. console.log(zeroes); // [0, 0, 0, 0, 0]
  30. // 索引部分可用,填充可用部分
  31. zeroes.fill(4, 3, 10)
  32. console.log(zeroes); // [0, 0, 0, 4, 4]

与 fill()不同,copyWithin()会按照指定范围浅复制数组中的部分内容,然后将它们插入到指 定索引开始的位置。开始索引和结束索引则与 fill()使用同样的计算方法: