这篇文章我们逐一看看数组中新添加的API。
1)Array.of ( ...items )
静态方法,把items转成数组,可以代替Array构造函数。
var a = Array( 3 );
a.length; // 3
a[0]; // undefined
var b = Array.of( 3 );
b.length; // 1
b[0]; // 3
var c = Array.of( 1, 2, 3 );
c.length; // 3
c; // [1,2,3]
2)Array.from ( items [ , mapfn [ , thisArg ] ] )
把array-like对象,iterator转成数组类型。
var arrLike = {
length: 3,
0: "foo",
1: "bar"
};
//var arr = Array.prototype.slice.call( arrLike );
var arr = Array.from( arrLike );//["foo", "bar", undefined]
var arrLike = {
length: 4,
2: "foo"
};
var arr = Array.from( arrLike, function mapper(val,idx){
if (typeof val == "string") {
return val.toUpperCase();
}
else {
return idx;
}
});
console.log(arr)// [ 0, 1, "FOO", 3 ]
3)Array.prototype.copyWithin (target, start [ , end ] )
把数组自身的一部分拷贝到令一部分。
[1,2,3,4,5].copyWithin( 3, 0 ); // [1,2,3,1,2]
[1,2,3,4,5].copyWithin( 3, 0, 1 ); // [1,2,3,1,5]
[1,2,3,4,5].copyWithin( 0, -2 ); // [4,5,3,4,5]
[1,2,3,4,5].copyWithin( 0, -2, -1 ); // [4,2,3,4,5]
[1,2,3,4,5].copyWithin( 2, 1 );//[1,2,2,3,4],理解这里的拷贝过程
4)Array.prototype.fill (value [ , start [ , end ] ] )
用一个值填充数组内容。
var a = Array( 4 ).fill( undefined );//[undefined,undefined,undefined,undefined]
var a = [ null, null, null, null ].fill( 42, 1, 3 ); [null,42,42,null]
5)Array.prototype.find ( predicate [ , thisArg ] )
查找数组元素,找到返回那个元素,否则返回undefined。
var a = [1,2,3,4,5];
a.find( function matcher(v){
return v == "2";
} ); // 2
a.find( function matcher(v){
return v == 7; // undefined
});
6)Array.prototype.findIndex ( predicate [ , thisArg ] )
查找数组元素,返回相应的索引,没有找到返回-1,和indexOf类似,但是能自定义比较函数。
var points = [
{ x: 10, y: 20 },
{ x: 20, y: 30 },
{ x: 30, y: 40 },
{ x: 40, y: 50 },
{ x: 50, y: 60 }
];
points.findIndex( function matcher(point) {
return point.x % 3 == 0 && point.y % 4 == 0;
}); // 2
points.findIndex( function matcher(point) {
return point.x % 6 == 0 && point.y % 7 == 0;
} );//-1
7)entries(), values(), keys()
参考迭代器
*以上全部代码在Chrome 48下通过测试