gpt4 book ai didi

带有应用的javascript数组映射

转载 作者:搜寻专家 更新时间:2023-11-01 04:52:09 24 4
gpt4 key购买 nike

我正在尝试在 javascript 中声明并初始化一个数组为 0。我创建了一个数组并设置了这样的长度。

var previousRow = [];
previousRow.length = 5;

然后,我做了这个。

console.log(previousRow);
previousRow = previousRow.map(Number.prototype.valueOf, 0);
console.log(previousRow);

我得到了,

[ , , , ,  ]
[ , , , , ]

但是,当我这样做的时候

console.log(previousRow);
previousRow = Array.apply(null, previousRow).map(Number.prototype.valueOf, 0);
console.log(previousRow);

我得到了我想要的

[ , , , ,  ]
[ 0, 0, 0, 0, 0 ]

为什么第一个代码不起作用?

最佳答案

阅读 map 的 MDN 文档.它明确指出:

callback is invoked only for indexes of the array which have assigned values; it is not invoked for indexes which have been deleted or which have never been assigned values.

previousRow array 是 length 的空数组5 .然而,这些元素从未被赋值:

var previousRow = [];
previousRow.length = 5;

由于 previousRow 的元素从未被赋值,它们将永远不会被 map 处理.因此映射Number.prototype.valueOfpreviousRow将产生一个包含 5 个元素的空数组:

console.log(previousRow);
previousRow = previousRow.map(Number.prototype.valueOf, 0);
console.log(previousRow);

然而当你apply previousRowArray constructor 构造函数创建一个新数组并分配 previousRow 的值到新阵列。

previousRow的元素是否无关紧要被分配了一个值。当 JavaScript 找不到它提供的值时 undefined相反。

因此,最终效果是新数组有 5 个元素,所有元素都被分配 undefined明确由 Array构造函数。因此你可以使用 map处理整个数组:

console.log(previousRow);
previousRow = Array.apply(null, previousRow).map(Number.prototype.valueOf, 0);
console.log(previousRow);

您应该阅读以下答案以获得更深入的解释:https://stackoverflow.com/a/18949651/783743

关于带有应用的javascript数组映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19064913/

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