MDN上的apply介绍: apply- MDN

apply()方法的第二个参数除了可以是数组外,从 ECMAScript 第5版开始,还可以是一个类数组对象:

从 ECMAScript 第5版开始,可以使用任何种类的类数组对象,就是说只要有一个 length 属性和(0..length-1)范围的整数属性。例如现在可以使用 NodeList 或一个自己定义的类似 {'length': 2, '0': 'eat', '1': 'bananas'} 形式的对象。

有的时候,我们需要初始化一个指定长度的数组,但又希望不仅仅只有length属性,却没有实际元素。
例如,Array(6)返回的是(6)[empty × 6],也就是一个长度为6的空数组。因为它没有实际的元素,所以不能使用循环mapsort等对它操作。这时候就可以使用apply和类数组对象初始化数组

Array.apply(null, {length: 6})

返回:

[undefined, undefined, undefined, undefined, undefined, undefined]

其中,Arraynew Array结果是一样的。因为apply的第二个参数类数组对象只提供了length,所以创建的数组每个元素都是undefined。这有什么用呢?

有一个从接口获取的数组arr

[
    { id: 1, name: 'a' },
    { id: 2, name: 'b' },
    { id: 3, name: 'c' },
]

希望创建一个长度等于arr,元素是arrname的新数组,可以这样写:

var newArr = [], len = arr.length;
for(var i = 0; i < len; i++){
    newArr.push(arr[i].name);
}

如果用apply就可以这样写:

Array.apply(null, { length: arr.length }).map(function(value, index){
    return arr[index].name;
});

标签: apply, 类数组对象

添加新评论