2013-09-05 2 views
0

Это, вероятно, очень простой вопрос - см простой код:Массив ссылок: добавление объекта в массив объектов

var ar1=[]; 
var ar2=[]; 
ar1[0] = 'Constant'; 
ar1[1] = data.attr.const; 
ar2.push(ar1); //OK, ar2 contains one array of two correct elements 

ar1[0] = 'R-squared'; 
ar1[1] = data.attr.rsq; 
ar2.push(ar1); // Not OK - ar2 contains 2 identical arrays 

ar1[0] = 'R-sq. adjusted'; 
ar1[1] = data.attr.rsqadj; 
ar2.push(ar1); // Not OK - ar2 contains 3 identical arrays 

Проблема заключается в том, что каждый раз, когда он выполняет ar2.push (AR1) , он перезаписывает все элементы ar2. После выполнения этого кода я получаю obect с 3 одинаковыми массивами. Как я могу это исправить?

Благодаря

+0

Потому что вы повторно использовать переменную Ar1, возможно? –

ответ

6

объектов в JS всегда ссылки (в отличие от строк или чисел). Всякий раз, когда вы push вы имеете в виду тот же объект, который уже находится внутри массива, вам необходимо клонировать:

ar2.push(ar1.slice(0)); // clone ar1 
+0

Спасибо! все исправлено. – user2723490

Смежные вопросы