2017-01-10 9 views
0

Я не уверен, если это ошибка, или если у меня есть полное непонимание Javascript, но это то, что происходит:Javascript свойства объекта с теми же значениями испытывают те же изменения, когда они не должны (сращивание)

Я принимаю объект с двумя массивами внутри него, один, представляющих текущую очередь идентификаторов и другие, представляющих общую очередь идентификаторов (гипотетическая ситуация)

var mainObject = { 
    object1:[], 
    object2:[] 
}; 

в функции, мы устанавливаем два массива свойств в то же самое переменная, которая содержит необходимый массив, прежде чем мы сможем начать обработку очереди.

var randomVar = [1,2,3,4]; 
mainObject.object1 = randomVar; 
mainObject.object2 = randomVar; 

Теперь мы хотим использовать метод сплайсинга для удаления первого индекса из объекта1, сохраняя его на объекте два.

mainObject.object1.splice(0,1); 

Результат объекта теперь выглядит следующим образом:

mainObject = { 
    object1:[2,3,4], 
    object2:[2,3,4] 
}; 

означает, что оба свойства были сращены, когда мы только попросили Javascript, чтобы запустить его один раз.

См JS Fiddle для живого примера: https://jsfiddle.net/ypow6y8g/

Есть ли что-то я пропускаю, или это просто еще одна ночь, проведенная с рыхлой JS?

ответ

5

У вас есть один массив и две переменные, значение которых является ссылкой на этот массив. Когда вы изменяете значение одной из этих переменных, вы изменяете другую, так как это одно и то же.

Если вы хотите, чтобы ваши массивы, чтобы быть независимыми, клонировать один:

var randomVar = [1,2,3,4]; 
mainObject.object1 = randomVar; 
mainObject.object2 = randomVar.slice(); // slice returns a new array 
+0

Отлично, спасибо! – Matthew