如何为数组JavaScript中的每个对象分配随机整数

时间:2020-05-22 08:01:46

标签: javascript arrays object

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?

1 个答案:

答案 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);