学习ES6:数组扩展

参考 阮一峰 《ES6 标准入门》

Array.from()

Array.from(obj[, func])
Function: 将类似数组的对象可遍历对象转为真正的数组。
return: Array

  • 只要是部署了Iterator接口的数据结构,都可以转换。
  • 特殊的...(扩展运算符)可以将部署了 Symbol.iterator 的对象转换成Array。
  • 任何具有length属性的对象都可以转换,但是扩展运算符无法将其转换。
  • 第二个参数可以传递一个方法,类似于map,对每个元素进行自定义处理后再放入数组。
  • 方法只返回数组,并不改变原有对象。
  • 对于类数组对象,可以指定length属性,决定最后产生的数组长度。

Array.of()

Array.of(…element)
Function: 将参数转换为数组
return: Array

该方法主要用以数组的构造,弥补原有的构造函数Array()的不足。

1
2
3
4
5
6
7
Array.of(1, 2, 3); //[1, 2, 3]
Array.of(3); //[3]
Array.of(3).length; //1

Array(1, 2, 3); //[1, 2, 3]
Array(3); //[undefined × 3]
Array(); //[]

copyWithin()

[copyWithin(target, start[, end]])
Function: 在当前数组内部将指定位置的成员复制到其他位置,返回当前数组。
return: array

  • 参数target: 数值,表述开始替换的位置。
  • 参数start: 数值, 表示开始读取的数据,默认为0,为负值则表示倒数。
  • 参数end: 数值, 表示结束读取的数据,默认为数组长度,为负值则表示倒数。
1
2
[].copyWithin.call({length: 5, 3: 1}, 0, 3);
//{0:1, 3:1, length: 5}

find()、findIndex()

find(callback)
findIndex(callback)

Function: 寻找到第一个符合条件的成员。
return: 返回符合条件的成员 或 下标。

  • 回调函数共可以设置三个参数valueindexarr
  • IndexOf()不同, find()findIndex()可以发现NaN。
1
2
[NaN].indexOf(NaN); //-1
[NaN].findIndex(x => Number.isNaN(x)); //0

fill()

[fill(value, start[, end]])
Funtcion: 用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。
return: array

  • 用于空数组的初始化非常方便。
  • 具体要填充的元素区间是 [start, end) , 一个半开半闭区间。
  • 参数 start 为负数,则为倒数。
  • 参数 end 为负数,则结束索引为 end+length。