Как клонировать массив объектов перед удалением?
Почему в data: [] пустой массив?
И как после отправки полностью удалить копию из памяти?
let items = [
{ws: false, data: [1,2,3,4,5]},
{ws: false, data: [1,2,3,4,5]},
{ws: false, data: [1,2,3,4,5]},
{ws: false, data: [1,2,3,4,5]},
];
let clone = [...items];
for (let i in items) {
items[i].data = [];
}
console.log(clone);
function sendData() {
$.ajax({
url: '/',
method: 'POST',
data: { data: clone },
dataType: 'json',
success: function(data) {},
complete: function() {
// удалить из памяти clone
}
});
}
// sendData(); // Отправка на сервер
Ответы (1 шт):
Автор решения: SwaD
→ Ссылка
Для того, что бы склонировать массив объектов, на примере вашего кода, необходимо склонировать как сам массив, так и все элементы, которые представляют собой объекты.
let items = [
{ws: false, data: [1,2,3,4,5]},
{ws: false, data: [1,2,3,4,5]},
{ws: false, data: [1,2,3,4,5]},
{ws: false, data: [1,2,3,4,5]},
];
let clone = [...items]; // Создаем новый массив
for (let i in items) {
clone[i] = { ...clone[i] }; // клонируем объекты
items[i].data = [];
}
console.log(clone, items);
Клонирование вашего массива, так же можно осуществить через создание функции, которая будет возвращать склонированный массив
let items = [
{ws: false, data: [1,2,3,4,5]},
{ws: false, data: [1,2,3,4,5]},
{ws: false, data: [1,2,3,4,5]},
{ws: false, data: [1,2,3,4,5]},
];
function clones(arr) {
return arr.map(item => {
return { ...item, ...{ data: [ ...item.data ]}}
});
}
let clone = clones(items);
for (let i in items) {
items[i].data = [];
}
console.log(clone, items);
Удалить переменную не получится, однако можно ее обнулить.
clone = null;
Если вы сможете реорганизовать ваш код так, что бы отправка данных была до обнуления основного массива, то сможете обойтись без создания переменной и клонирования массива.