【发布时间】:2021-02-04 02:09:20
【问题描述】:
我需要销毁一些变量可能已经有值的对象。
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?
【问题讨论】:
-
你有这么多独立变量的事实是一种气味。因为听起来它们都非常相关 - 它们可能存在于
config- 如果我是你,请考虑是否可以将它们合并到一个对象中,它会让你的代码更加干燥(至少在本节中)。一旦构建了最终对象,如果需要,然后稍后再进行解构,IMO -
@CertainPerformance 我试图这样做,但很难在不破坏任何东西的情况下进行重构,因为这些值无处不在,所以我最终放弃了。但我完全同意你的看法,这样会适得其反。
标签: javascript ecmascript-6 object-destructuring