我无法理解以下代码的工作方式。当我尝试打印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值的常规数组,并将每个连续元素(从0length-1)设置为某个值-从参数对象获取,或者从undefined获取(如果有)没有(例如您的情况)。

现在,这样编写一个map函数:

(v, i) => i


...忽略(使用它的数组的)值,只返回索引,每个元素一个。因此,映射转换实质上会创建一个数组,其中每个元素均等于其索引-[0, 1, 2, ...]

10-08 08:39
查看更多