循环唯一值-Nodejs



如何修复:代码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',角色:'正常',密码:0.4311454570811686},

{电子邮件:'1',角色:'normal',密码:0.4311454570811686},

{电子邮件:'1',角色:'normal',密码:0.4311454570811686},

{电子邮件:'1',角色:'normal',密码:0.4311454570811686},

{电子邮件:'1',角色:'normal',密码:0.4311454570811686},

{email:'1',角色:'正常',密码:0.4311454570811686}]

这里的问题是,您不断将同一对象一遍又一遍地推入数组。因此,从技术上讲,您最终只有一个具有多个参考的对象。而是尝试一下:

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

使用object.assign((将对象"克隆"。

最新更新