Возможно ли извлечь параметр из JS объекта без копирования, удалив его в самом объекте?

Рейтинг: 0Ответов: 2Опубликовано: 13.02.2023

Нужно сделать своего рода 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}

Возможно ли это без копирования?

Ответы

▲ 1Принят

Если я вас правильно понял, вы хотите скопировать значение в переменную и удалить это свойство у объекта. Для удаления можно использовать оператор delete.

function SomeMoveFunction(obj, key) {
  if (obj[key]) {
    let res = obj[key]
    delete obj[key]
    return res
  }
  return undefined
}
▲ 1

Могу предложить вот такой вариант с деструктурирующим копированием

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)