2016-12-12 2 views
3

У меня есть некоторые проблемы с этими двумя массивами.Копирование элементов первого массива во второй без двойного com

for (i = 0; i < post_data_route.length; i++) { 
    route_array.push(coordinates_array[post_data_route[i] - 1]); 
} 
route_array[route_array.length - 1][0] -= 0.00001; 
route_array[route_array.length - 1][1] -= 0.00001; 

route_array[route_array.length - 1] равна route_array[0], но когда я пытаюсь изменить один из них второй один тоже меняется. Я думаю, что это касается указателя, но почему это происходит? Разве это не просто подталкивает значения массива к другому? Как я мог избавиться от него? Спасибо за ваши ответы и предложения.

+1

так 'post_data_route' содержит другие массивы, то вы просто добавить те же ссылки на' route_array'. – vlaz

ответ

2

Вы можете использовать Array#slice для данных, что означает, что вы получите копию.

slice() метод возвращает неполную копию части массива в новый объект массива, выбранном от начала до конца (конец не включен). Исходный массив не будет изменен.

for (i = 0; i < post_data_route.length; i++) { 
    route_array.push(coordinates_array[post_data_route[i] - 1].slice()); 
} 
+0

Спасибо за ваш ответ, но поскольку мой массив не заполнен массивами, это не совсем то, что я искал, но теперь я немного ближе. Я думаю, что это ответ. Большое спасибо. –

+1

slice также скопирует ссылки на объекты (элементов массива) как есть и будет иметь тот же эффект. –

+0

@brawl_up, мы на самом деле не знаем, как выглядят ваши данные, чтобы дать правильный ответ, пожалуйста, добавьте эту часть в свой вопрос. –

0

вы можете создавать новые объекты и массивы с JSON.parse(JSON.stringify(yourArray))

его не так хорошо, но его рабочей

2

Вы подталкиваете не значение, а другой массив, потому что ваш массив является многомерным. Вам нужно подталкивать значение каждого размера отдельно.

Пример:

route_array.push([ 
     coordinates_array[post_data_route[i] - 1][0], 
     coordinates_array[post_data_route[i] - 1][1] 
     ]); 
Смежные вопросы