如何更新javascript对象

时间:2014-12-02 13:31:20

标签: javascript jquery arrays

我有像

这样的js对象
[{"name":"John","group":"t1..." .....}]

所以要从同一个t1创建新用户,我使用

循环遍历obj
var 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..." .....}]

我知道我做错了什么。我感谢任何帮助。

2 个答案:

答案 0 :(得分:7)

问题在于您将新变量名称分配给旧对象。这是一个参考,而不是对象的副本。 new_user = users[i]创建new_userusers[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

工作演示:http://jsfiddle.net/hkLkkepo/