当我运行此代码时:
var e = {
'id': 0,
'name': 'n'
};
var data = [];
for (var i = 0; i < 3; i++) {
e.id = i;
data.push(e);
}
console.log(data);
&#13;
我希望data
看起来像这样:
[
{
'id': 0,
'name': 'n'
},
{
'id': 1,
'name': 'n'
},
{
'id': 2,
'name': 'n'
}
]
但实际结果是:
[
{
'id': 2,
'name': 'n'
},
{
'id': 2,
'name': 'n'
},
{
'id': 2,
'name': 'n'
}
]
为什么会发生这种情况以及如何解决这个问题?
答案 0 :(得分:3)
问题在于您多次推动同一个对象并进行编辑。
尝试在循环中定义e:
var data=[];
for(var i=0;i<10;i++)
{
var e={'id':i,'name':'n'};
data.push(e);
}
或者使用克隆(使用jquery):
var data=[];
var e={'id':0,'name':'n'};
for(var i=0; i<10; i++)
{
var e_copy = jQuery.extend({}, e); // or clone(e)
e_copy.id=i;
data.push(e);
}
滚动你自己的克隆fn:
function clone(o){
var o_copy = {};
for (var p in o) {
if (o.hasOwnProperty(p)){
o_copy[p] = o[p]
}
}
return o_copy;
}