数组的拓展

数组的拓展

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"