TransWikia.com

como elegir una variable dinamicamente en JS?

Stack Overflow en español Asked by pwnaz on November 20, 2021

teniendo declarada la variables

let lang_EN = 'English'
let lang_ES = 'Spanish'

Como hago que una funcion me imprima el contenido de la variable elegida, por ejemplo

choosedLanguage("ES");
    
function choosedLanguage(language){
      console.log(Aqui es donde quiero la variable que deberia quedar como lang_ES o lang_EN)
}

Es decir quiero que el console log tome como estatico el lang_ y la siguiente parte sea el language que recibio la funcion, quedando lang_ES o lang_EN depende lo que se le pase en la funcion

El punto es poder mostrar variables compuestas de strings Por ejemplo si la funcion me recibiera dos string que el console.log me imprima la variable que forman los dos string

let text1 = 'hi'
unify('text','1')
function unify(string1,string2){
console.log(string1+string2)//Quiero que esto me forme la variable text1 y no un string para que el console me imprima hi
}

2 Answers

La solución rápida
Usar eval para ejecutar código pasado como un string, por lo que se pueden usar expresiones con valores dinámicos y resueltos en runtime.

const lang_ES = `Spanish`;
const lang_EN = `English`;

function chooseLanguage(language) {
    const value = eval(`lang_${language}`); // resolvemos lang_ES
    console.log(value);
}

chooseLanguage`ES`;

Pero, eval es peligroso, ya que depende cómo se use puede dar problemas de script injection. Dejo un ejemplo aquí.

La solución buena
Usar otro tipo de almacenamiento de datos como un objeto.

const langs = {
    ES: `Spanish`,
    EN: `English`
};

function chooseLanguage(language) {
    const value = langs[language];
    console.log(value);
}

chooseLanguage`ES`;

Es más sencilla, más segura y muchísimo más escalable en el futuro.

Espero que sirva.

Answered by VRoxa on November 20, 2021

Por lo que entiendo quieres evaluar la concatenación de dos string, como comida para el interprete. Esto es poible con la función eval()

Según la documentación de Mozilla:

El argumento de la función eval es una cadena de caracteres. Si la cadena de caracteres representa una expresión, eval() evalúa la expresión. Si el argumento representa una o más sentencias JavaScript, eval() evalúa las sentencias.

Esto es bueno por que no solo evalúa expresiones como en otros lenguajes de programación, si no también sentencias. En este caso se trata de una expresión.

Teniendo una variable con un nombre medio raro y

var_iable = "Soy una variable!"

definiendo la función unify() de tal forma que

function unify(string_a,string_b) {
    console.log(eval(string_a + string_b))
}

se obtenga la interpretación de la cadena,

unify("var_","iable")

da como resultado

Soy una variable!

Espero haberte ayudado.

Answered by user166844 on November 20, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP