搜索

首页  >  问答  >  正文

javascript - 关于循环创建对象数组以及增加随机值


var arr = [ { email: '', role: 'normal', password: '' },
  { email: '', role: 'normal', password: '' },
  { email: '', role: 'normal', password: '' },
  { email: '', role: 'normal', password: '' },
  { email: '', role: 'normal', password: '' },
  { email: '', role: 'normal', password: '' } ]

arr.forEach(o => { o.password =Math.random() })

output :[ { email: '', role: 'normal', password: 0.16326031488429638 },
  { email: '', role: 'normal', password: 0.4941354999549721 },
  { email: '', role: 'normal', password: 0.6802056630925 },
  { email: '', role: 'normal', password: 0.5038916232454755 },
  { email: '', role: 'normal', password: 0.5232000715886489 },
  { email: '', role: 'normal', password: 0.1599782533612224 } ]

当使用 for 创建一个 对象数组

 var obj  = {
    email: '1',
    role: 'normal',
    password: ''
},array=[]

for(let i =0;i<6;i++){
     array.push(function(){
         obj.password = Math.random()
         return obj
     })   
}

output: [ { email: '1', role: 'normal', password: 0.4311454570811686 },
  { email: '1', role: 'normal', password: 0.4311454570811686 },
  { email: '1', role: 'normal', password: 0.4311454570811686 },
  { email: '1', role: 'normal', password: 0.4311454570811686 },
  { email: '1', role: 'normal', password: 0.4311454570811686 },
  { email: '1', role: 'normal', password: 0.4311454570811686 } ]

我的问题是第二个用for产生的对象数组,obj.password的值不重复

.................

为情所困为情所困2728 天前647

全部回复(1)我来回复

  • 高洛峰

    高洛峰2017-06-05 11:15:16

    原因

    这个问题很隐蔽诶。

    obj 是引用。 意味着你每次 push 的都是同一个 obj

    至于值为什么一直都是一样 是因为 你修改的都是同一个 obj 所以值按最后一次的随机数来。


    如何修改

    var arr = [ { email: '', role: 'normal', password: '' },
      { email: '', role: 'normal', password: '' },
      { email: '', role: 'normal', password: '' },
      { email: '', role: 'normal', password: '' },
      { email: '', role: 'normal', password: '' },
      { email: '', role: 'normal', password: '' } ]
    
    arr.forEach(e => e.password = Math.random()); 
    
    arr.forEach(console.log);

    ScreenShot

    回复
    0
  • 取消回复