javascript - 關於循環創建物件數組以及增加隨機值
为情所困
为情所困 2017-06-05 11:13:16
0
1
676

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的值不重複

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

为情所困
为情所困

全部回覆(1)
小葫芦

原因

這個問題很隱密詶。

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板