循环唯一值 - nodejs

时间:2017-06-01 03:25:56

标签: javascript

我该如何解决:代码2 输出密码是否相同?

为什么代码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
    })
}

输出

  

[{email:'1',role:'normal',密码:0.4311454570811686},

     

{email:'1',role:'normal',密码:0.4311454570811686},

     

{email:'1',role:'normal',密码:0.4311454570811686},

     

{email:'1',role:'normal',密码:0.4311454570811686},

     

{email:'1',role:'normal',密码:0.4311454570811686},

     

{email:'1',role:'normal',密码:0.4311454570811686}]

1 个答案:

答案 0 :(得分:0)

这里的问题是你不断地将同一个对象一遍又一遍地推入数组中。所以从技术上讲,你最终只得到一个具有多个引用的对象。相反,试试这个:

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

使用Object.assign()来“克隆”对象。