0

我需要破坏一些变量可能已经有值的对象。

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

4

3 回答 3

2

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

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

const config = { foo: 42 };

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

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

于 2021-02-04T02:14:21.113 回答
1

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});

于 2021-02-04T02:12:28.250 回答
0

您可以循环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);

于 2021-02-04T02:23:48.733 回答