Как сохранить массив данных для дефолтного описания столбцов 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 шт):
Допустим есть массив
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;
}
})
})
Я учел вашу структуру данных(если я все правильно понял). Вы это можете вынести в отдельные функции и клонировать объекты глубже.
Что бы было более понятно, почему так происходит можно почитать тут например про копирование объектов