forEach 循环分配相同的随机数



在打字稿中,我试图为数组中每个对象的属性分配一个随机数。 我尝试了以下代码

uniqueItems.forEach(unique => {
unique.humanCode = Math.floor(1000 + Math.random() * 9000).toString();
});

如果我控制台.log在 forEach 循环中,我会得到一个不同的数字,但是当我控制台时.log forEach 之后的对象数组,所有随机数都是相同的。

编辑:我最初使用

for (let i = 0; i < this.quantity; i++) {
this.uniqueItems.push(uniqueItem);
}

这制作了相同对象的数组。 这意味着我的数组被分配了最后一个随机数。 我在创建数组时使用 spread 运算符修复了此问题。

for (let i = 0; i < this.quantity; i++) {
this.uniqueItems.push({ ...this.uniqueItem });
}

您可以使用 map 循环访问您的项目,并为数组中的每个项目返回一个新对象。这也将确保您不会通过引用更新对象。你应该阅读JavaScript中的可变性。这是JS中的一个重要概念

uniqueItems.map(unique => ({
...unique, 
humanCode: Math.floor(1000 + Math.random() * 9000).toString(),
}));

我已经尝试了以下代码,它对我有用。

let uniqueItems = [{
humanCode: 0,
},
{
humanCode: 0,
},
{
humanCode: 0,
},
]
uniqueItems.forEach(unique => {
unique.humanCode = Math.floor(1000 + Math.random() * 9000).toString();
});
console.log(uniqueItems);

最新更新