JavaScript - скопировать массив внутри функции - PullRequest
0 голосов
/ 07 марта 2012

У меня проблемы со следующим кодом:

test1 = [0,0];
function func(test)
{
    var test2 = new Array();
    for(var i = 0; i < test.length; i++)
    if(test[i] == 0)
    {
        test[i] = 1;
        test2.push(test);
        test[i] = 0;
    }
    return test2;
}
a = func(test1);
document.write(a[0].toString()+"<br/>");
document.write(a[1].toString());

и вывод:

0,0
0,0

Я уже проверил с помощью консоли: когда я изменяю test [i] внутри условия, после test2.push (test), test2 [test2.length] также изменяется. (Почему?)

Есть проблема с объемом? Что я должен сделать, чтобы получить такой вывод?

1,0
0,1

Спасибо.

Ответы [ 2 ]

2 голосов
/ 07 марта 2012
  test2.push(test);

Это не создает копию вашего тестового массива, а просто сохраняет новую ссылку на ваш входной массив.Таким образом, все, что делает ваша функция - это хранить множество ссылок на один и тот же входной параметр.Если вы хотите сохранить реальную копию, используйте это:

 test2.push( test.slice(0) );
0 голосов
/ 07 марта 2012

Используйте slice для создания копии массива:

var a = [1,2,3]
var b = a.slice();
b[0] = 0;
a[0] == 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...