Как деструктурировать объект на основе динамически определенной переменной - PullRequest
0 голосов
/ 06 января 2019

Я работаю с неизменным объектом, который мне нужно добавить, вычесть массив значений из.

Я знаю, что при использовании ES6 возможно уничтожение со следующим.

const {countries, remainder} = someObj // {countries:...,languages:..., ...keys};

В результате я получу новый объект без ключа страны.

Поэтому я понял, что мог бы использовать Reduce для массива, чтобы пройти и удалить все значения из объекта, возвращая новый объект в конце, используя параметр по умолчанию, являющийся исходным объектом.

Однако я не уверен, как это сделать, потому что имена ключей определены в массиве.

arrayToRemove.reduce((total, value) => {
  const { extractValue: [value], ...remainder } = total
  return remainder;
}, { ...originalObj });

arrayToRemove.reduce((total, value) => {
  const { [extractValue], ...remainder } = total
  return remainder;
}, { ...originalObj });

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

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

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 06 января 2019
arrayToRemove.reduce((obj, key) => {
  const { [key]: value, ...remainder } = obj
  return remainder
}, originalObj)
0 голосов
/ 06 января 2019

Вы можете использовать имена вычисляемых свойств с фиктивным свойством в качестве целевого свойства.

Подробнее здесь: шаблон назначения свойств объекта [YDKJS: ES6 & Beyond]

var originalObj = { foo: 1, bar: 2, baz: 3, },
    arrayToRemove = ['foo', 'bar'],
    result = arrayToRemove.reduce((total, key) => {
        const { [key]: dummy, ...remainder } = total;
        return remainder;
    }, originalObj);


console.log(result);
...