具有自身默认值的对象解构赋值
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);
我需要销毁一个对象,其中一些变量可能已经有值了。
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);