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