在打字稿中,我试图为数组中每个对象的属性分配一个随机数。 我尝试了以下代码
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);