¿Existe una forma más limpia de establecer los valores a, b y c en bar. ¿Algo similar a la sintaxis de asignación de estructuración 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);

Suponiendo que bar ya se ha instanciado en otro lugar, me gustaría establecer los nuevos valores sin crear / asignar un nuevo objeto a bar. Podríamos hacer algo como esto myObj = {...myObj, a, b, c}, pero eso asignaría un nuevo objeto a bar, según tengo entendido.

0
raychz 30 oct. 2017 a las 06:39

3 respuestas

La mejor respuesta

Basado en esta respuesta a una pregunta similar, puede usar 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);

O por supuesto

    const { foo } = myObj;
    Object.assign(myObj, {a: 1 + foo, b: 2 + foo, c: 3 + foo})
1
Tigregalis 30 oct. 2017 a las 05:08

Puede usar una abreviatura literal de objeto y construir su objeto al revés:

const foo = 10;
const a = 1+foo, b = 2+foo, c = 3+foo;
const bar = { foo, a, b, c };

Que por supuesto podría acortarse simplemente

const bar = { foo, a: 1+foo, b: 2+foo, c: 3+foo };
0
Bergi 30 oct. 2017 a las 04:04

ES6 no trajo ninguna característica que simplificaría este código. Hay una función disponible, pero se recomienda no usarla. El con la palabra clave

with (bar) {
 a = foo+1
 b = foo+2
 c = foo+3
}

La mejor manera de acortar ese código sería envolver la lógica en una llamada al método si se está reutilizando mucho.

0
Leland Barton 30 oct. 2017 a las 03:51