我该如何解决:代码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}]
答案 0 :(得分:0)
这里的问题是你不断地将同一个对象一遍又一遍地推入数组中。所以从技术上讲,你最终只得到一个具有多个引用的对象。相反,试试这个:
for (let i = 0; i < 6; i++) {
array.push(Object.assign({}, obj, {password: Math.random()}));
}
使用Object.assign()来“克隆”对象。