Edited to include a reproducible example.
创建新任务时,可以输入数量以创建具有相同数据的多个任务。在这种情况下,quantity
为3,因此将与name:value
对象中的其他newtaskconfig
对一起创建三个任务。该数量用于for循环中,以将许多任务推入newtasks
数组中。然后,将newtasks
数组中的每个对象分配一个具有三位数随机整数的id。
newtaskconfig = {
site: 'YeezySupply',
findby: 'URL',
urlorpid: 'test.com',
useproxies: 'TRUE',
quantity: 3
}
quantity = Number(newtaskconfig.quantity)
delete newtaskconfig.quantity
newtasks=[]
for (i = 0; i < quantity; i++)
{
newtasks.push(newtaskconfig)
}
newtasks.forEach(task=>{
task.id=Math.floor(Math.random()*(900)+100)
})
然后我将newtasks数组登录到控制台时,不是每个对象都有唯一的ID,它们最终都具有一个完全相同的ID,如下所示:
[
{
site: 'YeezySupply',
findby: 'URL',
urlorpid: 'test.com',
useproxies: 'TRUE',
id: 346
},
{
site: 'YeezySupply',
findby: 'URL',
urlorpid: 'test.com',
useproxies: 'TRUE',
id: 346
},
{
site: 'YeezySupply',
findby: 'URL',
urlorpid: 'test.com',
useproxies: 'TRUE',
id: 346
}
]
如何更改方法,以便为数组中的每个对象分配一个唯一的三位数ID?
答案 0 :(得分:1)
只需将行更改为newtasks.push({...newtaskconfig})
,而不是newtasks.push(newtaskconfig)
,这会导致引用相同。
更新:按照@jonrsharpe的建议,将代码简化为以下内容。
newtaskconfig = {
site: "YeezySupply",
findby: "URL",
urlorpid: "test.com",
useproxies: "TRUE",
quantity: 3
};
const { quantity, ...rest } = newtaskconfig;
const newtasks = new Array(quantity)
.fill(0)
.map(() => ({ ...rest, id: Math.floor(Math.random() * 900 + 100) }));
console.log(newtasks);