Как сохранить массив данных для дефолтного описания столбцов js

У меня в конструкторе заданы параметры таблицы ag-grid через указатели. При загрузке страницы я делаю push в новый массив, чтобы держать там дефолтные свойства таблицы. Но когда я меняю данные функционалом, то мой массив меняется автоматически.

let default_storage_head = []; // объявлена глобально за пределами класса

// делаю push данных в пустой массив при загрузке страницы
let context = this;
let myHead = context.dataSetTable.myHeader;
default_storage_head.push(myHead);

Далее я допустим меняю заголовки

 context.dataSetTable.myHeader.forEach(e=>{
   e.headerName = 'test';
 })

Значения моей переменной default_storage_head тоже изменились. Как мне сохранить изначальный вид массива когда я в первый раз делаю push ?


Ответы (1 шт):

Автор решения: SwaD

Допустим есть массив

const a = [[1],[{b: 1, c: [6, 2]}],[3], [{ a: 1}]];

Самый простой способ скопировать массив и все его содержимое, если внутри есть простой JSON(без функций):

const v = JSON.parse(JSON.stringify(a));

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

const b = a.map((d) => {
    return d.map((e) => {
        if (typeof e === 'object' && !Array.isArray(e)) {
            return Object.assign({}, e)
        } if (typeof e === 'object' && Array.isArray(e)) {
            return [ ...e ]
        } else {
            return e;
        }
    })
})

Я учел вашу структуру данных(если я все правильно понял). Вы это можете вынести в отдельные функции и клонировать объекты глубже.

Что бы было более понятно, почему так происходит можно почитать тут например про копирование объектов

→ Ссылка