Soy nuevo en javascript y estoy tratando de descubrir cómo pasar dinámicamente las funciones con el switch .
Por ejemplo, puedo pasar la función manualmente como siguiendo
var select =1 ; function add (val){ return val+512}; function subtract(val) {return val-300}; function multiply(val){return val*584}; var value = 290; var text = `the value is ${add(value)}` console.log(text); ¿Cómo puedo transmitir una función con un interruptor basado en el valor select ? Lo siguiente no funciona.
var select =1 ; function add (val){ return val+512}; function subtract(val) {return val-300}; function multiply(val){return val*584}; var value = 290; //switch statement switch(select){ case 1: add(value); break; case 2: subtract(value); break; case 3: multiply(value); break}; var string = `this value is ${switch(select){ case 1: add(value); break; case 2: subtract(value); break; case 3: multiply(value); break};}` console.log(string)Sugiero mover el bloque de interruptores dentro de una función, como la siguiente:
var select = 1; function add(val) { return val + 512 }; function subtract(val) { return val - 300 }; function multiply(val) { return val * 584 }; var value = 290; var string = `this string in ${chooseFunction(select, value)}` console.log(string) function chooseFunction (select, value) { // switch statement // Note that the break statement is optional // if you return a value at the end of a case block switch (select) { case 1: return add(value); case 2: return subtract(value); case 3: return multiply(value); } }Usted escribe una función que tiene el switch que devuelve el resultado de llamar a las funciones en función de la entrada y la usa en la cadena de plantilla.
function add(val) { return val + 512; } function subtract(val) { return val - 300; } function multiply(val) { return val * 584; } function run(value, select) { switch (select) { case 1: return add(value); case 2: return subtract(value); case 3: return multiply(value); } } const value = 290; const string1 = `This string is ${run(value, 1)}`; const string2 = `This string is ${run(value, 2)}`; const string3 = `This string is ${run(value, 3)}`; console.log(string1); console.log(string2); console.log(string3);No puede pasar un interruptor directamente, ya que no puede pasar una instrucción if sin un operador ternario. Debe encapsular su declaración de cambio en una función como esta:
var select =1 ; function add (val){ return val+512}; function subtract(val) {return val-300}; function multiply(val){return val*584}; var value = 290; const getValue = (s, v) => { switch(s) { case 1: return add(v); case 2: return subtract(v); case 3: return multiply(v); }; } var string = `this value is ${getValue(select, value)}` console.log(string)Otra forma de hacer esto es poner sus funciones en una matriz con el índice que hace referencia a la elección:
var select =1 ; function add (val){ return val+512}; function subtract(val) {return val-300}; function multiply(val){return val*584}; var value = 290; const fn = [add, subtract, multiply]; var string = `this value is ${fn[select - 1](value)}` console.log(string)