2017-06-01 93 views
0

我該如何修復:代碼2輸出密碼是否一樣?循環唯一值 - nodejs

爲什麼密碼是2密碼是一樣的?

代碼1

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 }] 

代碼2

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

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

輸出

[{電子郵件: '1',作用:「正常',密碼:0.4311454570811686} ,

{電子郵件: '1',作用: '正常的',密碼爲:0.4311454570811686},

{電子郵件: '1',作用: '正常的',密碼爲:0.4311454570811686},

{電子郵件: '1',作用: '正常的',密碼爲:0.4311454570811686},

{電子郵件: '1',作用: '正常的',密碼爲:0.4311454570811686},

{電子郵件: '1',角色:'正常',密碼:0.4311454570811686}]

+0

請試着讓這個問題清晰可辨。我不知道你在問什麼。 –

+0

等待................... – ZERO

回答

0

這裏的問題是,你一直推動同一個對象進入數組。所以從技術上講,最終只有一個具有多個引用的對象。而是試試這個:

for (let i = 0; i < 6; i++) { 
    array.push(Object.assign({}, obj, {password: Math.random()})); 
} 

使用Object.assign()來「克隆」對象。

+0

謝謝你,你是對的。 – ZERO

+0

你能給我一些關於這個的網址嗎? – ZERO

+0

當然,這[MDN文檔](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)很棒。 –