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

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], но когда я пытаюсь изменить один из них, второй тоже меняется. Я думаю, что это указатель, но почему это происходит? Разве это не просто подталкивание значений массива к другому? Как я мог избавиться от этого? Спасибо за ваши ответы и предложения.

3
brawl_up 12 Дек 2016 в 16:03

3 ответа

Лучший ответ

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

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

for (i = 0; i < post_data_route.length; i++) {
    route_array.push(coordinates_array[post_data_route[i] - 1].slice());
}
2
Nina Scholz 12 Дек 2016 в 13:05

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

Примере:

route_array.push([
      coordinates_array[post_data_route[i] - 1][0],
      coordinates_array[post_data_route[i] - 1][1]
      ]);
2
user6269864user6269864 12 Дек 2016 в 13:04

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

Это не так приятно, но его работа

0
lacexd 12 Дек 2016 в 13:04