Возможно ли извлечь параметр из JS объекта без копирования, удалив его в самом объекте?
Нужно сделать своего рода move из объекта в переменную, но только чтобы не копировать весь параметр объекта который может быть весьма большим вложенным объектом.
Например:
let obj = {key1: val, key2: {/*very big data here*/}};
let data = SomeMoveFunction(obj, "key2");
// result
console.log(data); // Object {/*very big data here*/}
console.log(obj); // Object {key1: val}
Возможно ли это без копирования?
Ответы (2 шт):
Автор решения: T0xee.n17
→ Ссылка
Если я вас правильно понял, вы хотите скопировать значение в переменную и удалить это свойство у объекта. Для удаления можно использовать оператор delete.
function SomeMoveFunction(obj, key) {
if (obj[key]) {
let res = obj[key]
delete obj[key]
return res
}
return undefined
}
Автор решения: SwaD
→ Ссылка
Могу предложить вот такой вариант с деструктурирующим копированием
let obj = {key1: 'val', key2: {a: 1, b: 2}};
let data = SomeMoveFunction(obj, "key2");
function SomeMoveFunction(inObj, key) {
let { [key]: data } = inObj;
delete inObj[key];
return data;
}
console.log(data)
console.log(obj)