数组的拓展
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"