How to destructure an object based on a dynamic defined variable

◇◆丶佛笑我妖孽 提交于 2020-02-02 06:50:11

问题


I am working with an immutable object that I need to add subtract an array of values from.

I know it's possible using ES6 destructing with the following.

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

This will end me up with the remainder being the new Object without the countries key.

Therefore I figured out that I could use reduce on an array to go through and remove all the values from the object, returning a new object in the end, using the default parameter, being the original object.

However, I am not sure how to go about it, because the names of keys are defined in the array.

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

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

I am expecting to end up with a new Object without the keys that are contained in the array called arrayToRemove.

I need to do this while maintaining immutability, so I cannot just loop through the original object and remove them from it, so I thought the above would be a bright way to go about it.

Any help is appreciated.


回答1:


You could use a computed property names with a dummy as target property.

Read more here: object property assignment pattern [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);



回答2:


arrayToRemove.reduce((obj, key) => {
  const { [key]: value, ...remainder } = obj
  return remainder
}, originalObj)


来源:https://stackoverflow.com/questions/54064859/how-to-destructure-an-object-based-on-a-dynamic-defined-variable

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!