我有像
这样的js对象[{"name":"John","group":"t1..." .....}]
所以要从同一个t1创建新用户,我使用
循环遍历objvar new_user;
for(var i=0; i<users.length; i++) {
if(users[i].group === 'group name goes here') {
new_user = users[i];
break;
}
}
然后只需使用users.push(new_user);
推送它然后我尝试使用
var l = users.length - 1; users[l].name = 'Jack';
它会更改所有用户的名称。
[{"name":"Jack","group":"t1..." .....},{"name":"Jack","group":"t1..." .....}]
我知道我做错了什么。我感谢任何帮助。
答案 0 :(得分:7)
问题在于您将新变量名称分配给旧对象。这是一个参考,而不是对象的副本。 new_user = users[i]
创建new_user
与users[i]
相关联的引用。您必须复制users[i]
对象,才能更改new_user
。 Underscore有一个可以使用的复制/克隆功能。
答案 1 :(得分:1)
@ Haneev的回答提供了为什么代码更改了所有name
元素的users
的概念。以下是使用slice method
users[i]
的代码示例
var users = [{"name":"John","group":"t1"}];
var new_user;
for(var i=0; i<users.length; i++) {
if(users[i].group === 't1') {
// make a copy of users[i] and assign to new_user
new_user = users.slice(i);
break;
}
}
// add new_user to users
users.push(new_user);
var l = users.length - 1;
users[l].name = 'Jack';
alert(users[0].name); // this will display John
alert(users[1].name); // this will display Jack