romasovest
@romasovest
~

Метод .splice() портит оригинальный массив. Как этого избежать?

Метод .splice() портит оригинальный массив.

var orig_arr=[1,2,3,4,5,6,7]; // неповторимый оригинал
var temp_arr = orig_arr; // жалкая копия
temp_arr.splice(0,5); // издевательства над копией
console.log(orig_arr); // получаем [6,7] – оригинал пострадал


Как сделать, чтобы издевательства над копией не влияли на оригинал?

Сам придумал такое извращение:

var temp_arr = orig_arr.join("невероятный-набор-символов").split("невероятный-набор-символов");


Наверняка есть более пряморукий способ? Подскажите, пожалуйста
  • Вопрос задан
  • 580 просмотров
Решения вопроса 4
0xD34F
@0xD34F Куратор тега JavaScript
При присваивании копируется ссылка на массив, а не сам массив. Чтобы скопировать массив, есть варианты:

var copy = arr.slice();

var copy = arr.concat();

var copy = [...arr];

var copy = Array.from(arr);
Ответ написан
Комментировать
ES6:
var arr = [1, 2, 3]
var copyArr = new Array(...arr)
copyArr.splice(0, 2)
console.log(arr) // -> [1, 2, 3]


ES5:
var cloneArr = function(arr) {
  return Array.apply(null, arr)
}

var arr = [1, 2, 3, 4, 5]
var clonedArr = cloneArr(arr)

clonedArr.splice(0, 4)

console.log(arr) // -> [1, 2, 3, 4, 5]
console.log(clonedArr) // -> [5]
Ответ написан
Fragster
@Fragster
помогло? отметь решением!
Описание Splice
Метод splice() изменяет содержимое массива, удаляя существующие элементы и/или добавляя новые.


Оператор присваивания в данном случае присваивает ссылку на объект, соответственно, все действия по этой ссылке приводят к модификации самого объекта. В данном случае нужно делать реальную копию, например с помощью

JSON.parse(JSON.stringify)
Lodash.clone()
Ответ написан
Комментировать
evgeniy8705
@evgeniy8705
Повелитель вселенной
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let copy = [...arr];

console.log(copy.splice(0, 5)); // [1, 2, 3, 4, 5]
console.log(arr); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
25 нояб. 2024, в 18:39
30000 руб./за проект
25 нояб. 2024, в 18:35
30000 руб./за проект
25 нояб. 2024, в 18:33
10000 руб./за проект