是否有更简洁的方法在a
中设置值b
,c
和bar
。类似于ES6解构赋值语法的东西?
bar = { foo: 10, a: 0, b: 0, c: 0, baz: 14 };
myFunc = (myObj) => {
const { foo } = myObj;
let a, b, c;
a = 1 + foo;
b = 2 + foo;
c = 3 + foo;
myObj.a = a;
myObj.b = b;
myObj.c = c;
}
myFunc(bar);
假设bar
已在其他地方实例化,我想设置新值而不创建/分配新对象bar
。我们可以执行类似myObj = {...myObj, a, b, c}
之类的操作,但是根据我的理解,它会将新对象分配给bar
。
答案 0 :(得分:1)
根据this answer to a similar question,您可以使用Object.assign()
。
bar = { foo: 10, a: 0, b: 0, c: 0, baz: 14 };
myFunc = (myObj) => {
const { foo } = myObj;
let a, b, c;
a = 1 + foo;
b = 2 + foo;
c = 3 + foo;
Object.assign(myObj, {a: a, b: b, c: c});
}
myFunc(bar);
或当然
const { foo } = myObj;
Object.assign(myObj, {a: 1 + foo, b: 2 + foo, c: 3 + foo})
答案 1 :(得分:0)
ES6没有引入任何可以使此代码更简单的功能。有一个功能可用,但最好不要使用它。 with keyword
with (bar) {
a = foo+1
b = foo+2
c = foo+3
}
使代码更短的最佳方法是将逻辑包装到方法调用中,如果它被重复使用的话。
答案 2 :(得分:0)
您可以使用对象文字速记并反过来构建您的对象:
const foo = 10;
const a = 1+foo, b = 2+foo, c = 3+foo;
const bar = { foo, a, b, c };
当然可以简化为
const bar = { foo, a: 1+foo, b: 2+foo, c: 3+foo };