Javascript 使用for循环创建具有唯一ID的对象

Javascript 使用for循环创建具有唯一ID的对象,javascript,arrays,for-loop,object,Javascript,Arrays,For Loop,Object,因此,我试图生成一个数组,该数组将包含多个对象,其中一个包含另一个数组。每个对象都应该有自己唯一的id,但当使用for循环时,每个批处理都有具有相同重复id的对象。使用i变量甚至添加随机数值似乎都不起作用。这在javascript中甚至可以实现吗 Test.js const testFunc = () => { let resultArray = [] let testObj = {} let testArray = [] const rn = () => {

因此,我试图生成一个数组,该数组将包含多个对象,其中一个包含另一个数组。每个对象都应该有自己唯一的id,但当使用for循环时,每个批处理都有具有相同重复id的对象。使用i变量甚至添加随机数值似乎都不起作用。这在javascript中甚至可以实现吗

Test.js

const testFunc = () => {
  let resultArray = []
  let testObj = {}
  let testArray = []

  const rn = () => {
    return ~~(Math.random() * 1000)
  }

  for (let i = 0; i < 3; i++) {
    testObj = { id: rn() }
    testArray.push(testObj)
    testObj = {}
  }

  for (let i = 0; i < 3; i++) {
    resultArray.push(testArray)
  }

  console.log(resultArray)
  return resultArray
}
结果我得到:

[
  [
    { id: 859, text: 0 },
    { id: 232, text: 1 },
    { id: 240, text: 2 },
    { id: 638, text: 3 },
    { id: 393, text: 4 }
  ],
  [
    { id: 859, text: 0 },
    { id: 232, text: 1 },
    { id: 240, text: 2 },
    { id: 638, text: 3 },
    { id: 393, text: 4 }
  ],
  [
    { id: 859, text: 0 },
    { id: 232, text: 1 },
    { id: 240, text: 2 },
    { id: 638, text: 3 },
    { id: 393, text: 4 }
  ]
]

testArray
推三次到
resultArray
。而是在循环中生成
testArray
,将其推送到
resultArray
,并添加以下项目:

consttestfunc=()=>{
常量结果数组=[]
常数rn=()=>{
return~~~(Math.random()*1000)
}
for(设i=0;i<3;i++){
常数testArray=[]
结果数组推送(testArray)
for(设i=0;i<3;i++){
常量testObj={id:rn()}
testArray.push(testObj)
}
}
返回结果数组
}

log(testFunc())
您只能创建一个子数组。线路

let testArray = []
只跑一次,你就跑一次

resultArray.push(testArray)
3次-因此在结果中,
resultArray
中的所有子数组都引用相同的
testArray

而是显式创建一个新数组,并使用嵌套循环,以便总共有3x3次迭代:

let resultArray=[]
设testObj={}
常数rn=()=>{
return~~~(Math.random()*1000)
}
for(设i=0;i<3;i++){
常数testArray=[]
for(设i=0;i<3;i++){
常量testObj={
编号:rn()
}
testArray.push(testObj)
}
结果数组推送(testArray)
}

console.log(resultArray)
如果您选择的是0到999之间的随机数,那么id冲突将非常麻烦。这就是所谓的生日悖论。在您的情况下,只有38项才能有50%的机会拥有两个相同的ID。请保留一个计数器,或使用npm uuid包中的uuid()。@CharlesBamford感谢您的评论!我也试过uuid(),但结果完全一样——只是它不是数字。这是因为答案解决了问题。所以我只推了三个相同的项目。难怪他们都有相同的身份证。非常感谢。谢谢你的评论!你的解释使我头脑清醒了许多
resultArray.push(testArray)