使用类似destructure的语法分配给对象中的多个值

时间:2017-10-30 03:39:35

标签: javascript ecmascript-6

是否有更简洁的方法在a中设置值bcbar。类似于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

3 个答案:

答案 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 };