javascript - 从包含 length 属性的对象创建数组

标签 javascript

我无法理解以下代码的工作原理。当我尝试打印 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() has an optional parameter mapFn, which allows you to execute a map function on each element of the array (or subclass object) that is being created.

More clearly, Array.from(obj, mapFn, thisArg) has the same result as Array.from(obj).map(mapFn, thisArg), except that it does not create an intermediate array.

现在,让我们分别检查每个部分。 Array.from({length: 5}) 计算结果为...

[undefined, undefined, undefined, undefined, undefined]

standard中有详细解释。简而言之,结果是一个具有相同 length 值的常规数组,每个连续元素(从 0length-1)设置为某个值 - 要么从参数对象中获取,要么从参数对象中获取,或者如果没有(例如在您的情况下),则为“未定义”。

现在, map 函数如下所示:

(v, i) => i

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

关于javascript - 从包含 length 属性的对象创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49919490/

相关文章:

javascript - 如何使用 javascript 禁用第一次鼠标单击网页上的操作?

javascript - ReactJS 在第一次渲染后无法正确渲染 HTML 音频

javascript - 为 Bootstrap Hover 菜单设置定时延迟

php - 如何快速确定用户附近是否有多个地点 - Google Places API

javascript - 使用连续字母和数字的密码验证 - RegEx

javascript - 为什么在重新分配错误之前在新 block 中使用 let 变量?

javascript - ASP.NET 隐藏字段在回发后不更新

javascript - 在 ajax 回调上重新加载 Rails 部分

javascript - 如何在 reactJS 的 .map() 中使用 setTimeout

javascript - 更改同一页面上的多个图像