Как скопировать массив в узел без ссылки и JSON-разбор / stringify - PullRequest
1 голос
/ 04 октября 2019

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

Я пытался скопировать этот массив с помощью concat/slice/[...array], но каждый раз он использует одну и ту же ссылку / указатель. Только с JSON.parse(JSON.stringify(array)) это, кажется, работает.

Есть ли более эффективный способ скопировать массив / объект / переменную без получения ссылки / указателя с ним

var Array2 = [...Array];

var Array2 = Array.concat();

var Array2 = Array.slice();

dosent work.

var Array = [{
   test: 'i am a test'
}]


var Array2 = Array;

Array2.favorite = true;

console.log(Array) //result: test: 'i am a test', favorite: true

var Array3 = JSON.parse(JSON.stringify(Array)); 

console.log(Array) //result: test: 'i am a test'

1 Ответ

1 голос
/ 04 октября 2019

То, что вы пытаетесь сделать, - клонировать содержимое массива. Таким образом, у вас есть несколько вариантов:

  1. Использовать lodash
    • var newArr = _.cloneDeep(originalArr)
  2. Если вы уверены, у вас есть только простые объекты - выможет использовать что-то вроде:
    • var newArr = originalArr.map(d => Object.assign({}, d))
  3. Если структура хорошо известна - вы можете написать cloneFunction для структуры, чем использовать свой собственный клон сoriginalArr.map(cloneFunction)
...