数组的拓展

Array.from()

将似数组对象(array-like object) 和可遍历例对象(iterable)转为真正的数组

ES5

var arr1 = [].slice.call(arraylike);

ES6

let arr2 = Array.from(arraylike);

需要注意的是这里是浅拷贝(如果元素是对象引用,则拷贝对象引用到新数组)。

Array.from()可以接受第二个参数 类似于数组的map方法

let names1 = Array.prototype.map.call(spans, s => s.textContent);
let names2 = Array.from(spans, s => s.textContent, this);

拓展运算符(…)也可以将某些数据结构转为数组

function foo() {
  var args = [...arguments];
}
Array.of()

用于将一组值转换为数组,可以替代Array()或者new Array()

ES5

function ArrayOf() {
  return [].slice.call(arguments);
}
ArrayOf(3, 11, 8);//[3,11,8]

ES6

Array.of(3, 11, 8);//[3,11,8]
copyWithin()

在当前数组内部将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组

ES5

var i32a = new Int32Array([1, 2, 3, 4, 5]);
i32a.copyWithin(0, 2);
// Int32Array [3, 4, 5, 4, 5]

ES6

let a = [1, 2, 3, 4, 5];
a.copyWithin(0, 2);
// [3, 4, 5, 4, 5]

[].copyWithin.call({ length: 5, 3: 1 }, 0, 3);//类数组对象
// {0: 1, 3: 1, length: 5}
find()和findIndex()

用于找出第一个符合条件的数组成员,弥补IndexOf不能发现NaN的不足

ES5

[1, 2, NAN].indexOf(NaN);
//-1

ES6

[1, 2, NAN].find(Y => Object.is(NaN, y));
//2
fill()

使用给定值填充数组,数组中已有元素会被抹去;如果有第二个和第三个参数,可以指定填充的起始和结束位置

['a', 'b', 'c'].fill(7, 1, 2);
//[a,7,c]
entries() keys() values()

用于遍历数组,它们都返回一个遍历器对象

for (let index of ["a", "b"].keys()) {
  cobsole.log(index);
}//0 1

for (let [index, ele] of ["a", "b"].entries()) {
  console.log(index, ele);
}//0 "a"  1 "b"