Solo trato de hacer un cambio por dos valores.
switch ({'a': val_a,'b': val_b}){ case ({'x','y'}): "some code here" break; }y esto no funciona... alguna ayuda? ¡Gracias!
El operador de cambio solo funciona para primitivos, no es posible comparar objetos, pero puede crear primitivos usted mismo, por ejemplo, cadena
const compareValue = val_a + ' ' + val_b; switch (compareValue){ case 'x y': //"some code here" break; }El valor en una declaración de caso debe ser una constante o un literal o una expresión que se evalúe como una constante o un literal . No puede esperar que una declaración de cambio tenga objetos y que las declaraciones de casos subyacentes tengan sus propios objetos y hagan una comparación.
Dicho esto, tiene opciones en javascript que le permiten transformar un objeto (solo con fines comparativos). Un enfoque que seguiría sería así
let obj = {'a': 'x','b': 'y'}; let obj1={a:'x',b:'y'}; switch(Object.values(obj).join(',')) { case Object.values(obj1).join(','): console.log('evaluation succeeds'); break; }Entonces, lo que hice fue tomar los valores del objeto y unirlos con una coma (efectivamente, tener una cadena), y en el caso, la declaración hizo lo mismo con otro objeto (para que la comparación pudiera tener lugar)
switch(true) { case obj1.a == obj2.a && obj1.b == obj2.b: console.log('true'); break; }