2014-12-02 3 views
1

У меня есть объект JS, какКак обновить JavaScript Object

[{"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..." .....}] 

Я знаю, что делаю что-то неправильно. Я ценю любую помощь.

+1

уага л = users.length-1; – rahpuser

+0

Мой плохой я пропустил -1. Извините –

+1

Вы уверены, что все остальные элементы имели 'имя', кроме' Jack', прежде чем вы будете использовать 'users [l] .name = 'Jack''? – ekad

ответ

1

@ Ответ Haneev дает представление о том, почему name всего users элементов был изменен кодом. Ниже приведен пример кода, как вы копируете users[i] с помощью slice method

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/

7

Проблема заключается в том, что вы назначаете новое имя переменной для старого объекта. Это ссылка, а не копия объекта. new_user = users[i] создает ссылку, которая связана с users[i]. Вы должны скопировать объект users[i], чтобы изменить только new_user. Подчеркивание имеет функцию копирования/клонирования, которую вы можете использовать.