2015-08-31 2 views
0

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

[ 
[0,2], 
[0,1], 
[0,0] 
] 

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

coods.unshift(new); 

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

[ 
[0,2], 
[0,2], 
[0,2] 
] 

Как я могу это исправить?

+0

Ну, да, объекты и массивы всегда обрабатываются «по ссылке». Если вы хотите сделать копию, вам необходимо явно сделать копию. Возникает вопрос, как создать копию массива? Без более конкретного кода о том, как создаются эти массивы, мы не можем много помочь. – deceze

ответ

1

Чтобы добавить копию массива, вы можете использовать coods.unshift(new.slice()). (См. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice).

В качестве альтернативы, возможно, есть возможность изменить дизайн кода, чтобы это не было проблемой, но если нет, то slice, вероятно, путь. Вы можете использовать определенную функцию клонирования (в нескольких библиотеках есть или написать свой собственный, который использует срез), чтобы сделать его более смысловым.

+0

с использованием 'new.slice()' работал отлично. Спасибо! – Aron

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