我无法理解以下代码的工作方式。当我尝试打印v
的值时,得到undefined
的时间与length
一样多。
Array.from({length: 5}, (v, i) => i);
// [0, 1, 2, 3, 4]
尝试过的代码:
console.log(Array.from({length: 3}, function(v,i) {
console.log(v);
console.log(i);
return i;
}));
最佳答案
引用docs:
Array.from()
有一个可选参数mapFn
,它使您可以
在数组(或子类)的每个元素上执行map函数
对象)。
更清楚地,Array.from(obj, mapFn, thisArg)
与Array.from(obj).map(mapFn, thisArg)
的结果相同,只是它不创建中间数组。
现在,让我们分别检查每个部分。 Array.from({length: 5})
评估为...
[undefined, undefined, undefined, undefined, undefined]
standard中有详细说明。简而言之,结果是一个具有相同
length
值的常规数组,并将每个连续元素(从0
到length-1
)设置为某个值-从参数对象获取,或者从undefined
获取(如果有)没有(例如您的情况)。现在,这样编写一个map函数:
(v, i) => i
...忽略(使用它的数组的)值,只返回索引,每个元素一个。因此,映射转换实质上会创建一个数组,其中每个元素均等于其索引-
[0, 1, 2, ...]
。