gpt4 book ai didi

javascript - 在 Array(3) 与 [1,2,3] : why are they different 之间映射常量函数

转载 作者:行者123 更新时间:2023-11-30 07:49:05 24 4
gpt4 key购买 nike

为什么这两个表达式会产生不同的结果?

> [1,3,4].map(x=>5) // (3) [5, 5, 5]
> Array(3).map(x=>5) // (3) [empty × 3]

最佳答案

因为数组不同。 [1, 3, 4] 创建一个 length 为 3 且其中包含三个条目的数组。 Array(3) 创建一个长度 为 3 的数组,其中没有 条目(稀疏 数组) . map 跳过数组中的空槽,因此永远不会执行您的 map 回调。

你可以在这里看到,第一个有一个名为 "0" 的属性(记住 JavaScript 中的标准数组 aren't really arrays at all ¹,除非在 JavaScript 引擎中进行优化)但第二个没有:

const a1 = [1, 3, 5];
console.log(a1.length); // 3
console.log("0" in a1); // true

const a2 = Array(3);
console.log(a2.length); // 3
console.log("0" in a2); // false

如果要填充该数组,请使用 fill :

console.log(Array(3).fill(5));

fill 非常适用于所有元素使用相同值的情况,但如果您希望不同元素使用不同值,则可以使用 Array.from 的映射回调。 :

console.log(Array.from(Array(3), x => Math.random()));

当使用 Array.from 时,如果大小是(不仅仅是3),那么在某些 JavaScript 引擎(例如 V8在 Chrome、Edge 和其他程序中),你会想要使用 {length: value} 而不是 Array(value),因为它是一个临时对象,当你使用Array(value),V8(可能还有其他)为该数量的元素预先分配存储空间,即使这些元素最初是空的。所以:

console.log(Array.from({length: 3}, x => Math.random()));


¹ (这是我贫血的小博客上的一篇文章。)

关于javascript - 在 Array(3) 与 [1,2,3] : why are they different 之间映射常量函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57461935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com