具有自身默认值的对象解构赋值

Object destructuring assignment with default value of itself

我需要销毁一个对象,其中一些变量可能已经有值了。

let foo = 1, bar, baz = 'Hello';

const config = { foo: 42 };

({ foo, bar, baz } = config);

console.log({ foo, bar, baz });

这给了我

{
  "foo": 42,
  "bar": undefined,
  "baz": undefined
}

但我真正想要的是

{
  "foo": 42,
  "bar": undefined,
  "baz": "Hello"
}

如果config中有同名值,我想重写该值,如果没有,则使用其原始值代替。

我无法在解构时分配默认值,因为值是之前分配的。

({ foo = 1, bar, baz = 'Hello' } = config);

我知道我可以这样赋值,但它太笨重了,因为有超过 20 个变量。

({ foo = foo, bar = bar, baz = baz } = config);

有没有更好的写法,不用一直重复x = x

Object.assign 将是解决您问题的绝佳人选。祝你好运^^!

let foo = 1, bar, baz = 'Hello';

const config = { foo: 42 };
const target = {foo, bar, baz};
const source = ({ foo, host, bar } = config);

const result = Object.assign(target, source);
console.log(result);


如果你想重新分配变量而不是返回一个新对象,你可以像下面那样做。

let foo = 1, bar, baz = 'Hello';
const config = { foo: 42 };

// Step 1: merge 2 objects
const mergedObject = { foo, bar, baz, ...config };

// Step 2: re-assign variables from `mergedObject`
({foo, bar, baz} = mergedObject);

console.log({foo, bar, baz});

使用原始值(默认值)创建一个对象,并将 config 散布到其中,覆盖默认值,然后解构它:

let foo = 1, bar, baz = 'Hello';

const config = { foo: 42 };

({ foo, bar, baz } = { foo, bar, baz, ...config });

console.log({ foo, bar, baz });

你可以循环 config 然后像这样赋值。

let foo = 1, bar, baz = 'Hello';
const config = { foo: 42 };
const result = {foo, bar, baz};

Object.entries(config).forEach(([key, value]) => {
  if(result[key])
    result[key] = value;
});

console.log(result);