Клонирование двухмерного массива [дубликат]

245
02 августа 2017, 23:23

На данный вопрос уже ответили:

  • Копирование объекта с последующим изменением [дубликат] 3 ответа

Нужно сделать клон двухмерного массива, чтобы можно было в клоне менять значения так, чтобы они не менялись при этом в исходном. Как это сделать?

let arr = [[1,2,3], [1,2,3], [1,2,3]] 
let arr2 = Object.assign([], arr); 
     
arr2[0][0] = 22; 
     
console.log(arr2); 
console.log(arr);

Answer 1

Вы уже почти всё сделали

let arr = [[1,2,3],[1,2,3],[1,2,3]] 
let arr2 = arr.map(el => Object.assign([],el)); 
 
arr2[0][0] = 22; 
 
console.log(arr2); 
console.log(arr);

Вот еще несколько вариантов, как это сделать:

JSON

let arr = [[1,2,3],[1,2,3],[1,2,3]] 
let arr2 = JSON.parse(JSON.stringify(arr)); 
arr2[0][0] = 22; 
console.log(arr2[0][0], arr[0][0]);

Concat

let arr = [[1,2,3],[1,2,3],[1,2,3]] 
let arr2 = arr.map(el => [].concat(el)); 
arr2[0][0] = 22; 
 
console.log(arr2[0][0], arr[0][0]);

Slice

let arr = [[1,2,3],[1,2,3],[1,2,3]] 
let arr2 = arr.map(el => el.slice(0)); 
arr2[0][0] = 22; 
 
console.log(arr2[0][0], arr[0][0]);

Если надо быстро

arr2 = []; 
for(var i = 0; i<arr.length; i++){ 
  arr2[i]=[]; 
  for(var j = 0; j<arr[i].length; j++){ 
    arr2[i]=arr[i][j]; 
  } 
}

READ ALSO
Как работает эта магия c new Date?

Как работает эта магия c new Date?

Работает правильно, но что происходит? Как работает строчка где var total_days = вообще не понимаю, узнать дату на 32-й день?

330
Загрузка ресурсов веб-приложения в кэш

Загрузка ресурсов веб-приложения в кэш

ПриветДля того, чтобы пользователь видел красивый прелоадер загрузки сайта, я использую следующий код:

252
Собрать все js-файлы в один в webpack

Собрать все js-файлы в один в webpack

ПриветНачинаю работать с Webpack и сейчас мой конфиг выглядит так:

374