// declared read-only variable: const support = { arr: { ins: ['g3', 'g5', 'g7', 'g10', 'g12', 'g13', 'g14', 'g15' ] } }, // object destructuring for easy to call: { arr: { ins: supE1range } } = support; y una función para cambiar dinámicamente entre sup y 1 en el objeto supE1range :
function autoSelect(currClass, currElite) { let setClass = ''; switch (currClass) { case 'support': setClass = 'sup'; break; } let setObj = `${setClass}E${currElite}range`; console.log(eval(setObj)); } autoSelect('support', 1); como puede ver, eval(setObj) obtendrá el valor de supE1range porque la cadena coincide con el nombre del objeto.
y ahora, ¿cómo lograr eso sin eval ?
He buscado preguntas/respuestas relacionadas pero no satisface lo que necesito.
umm.. no te preocupes por el 'cambio dinámico' porque es solo una parte del código que no es necesario poner aquí
Mi sugerencia es que, en lugar de crear una variable a partir de la desestructuración, intente crear un objeto ( map en este caso) para mantener el valor con las claves que especifique.
Luego recupere el valor buscando el objeto del map .
const map = {}; // declared read-only variable: const support = { arr: { ins: map.supE1range = ['g3', 'g5', 'g7', 'g10', 'g12', 'g13', 'g14', 'g15'] }, }; function autoSelect(currClass, currElite) { let setClass = ''; switch (currClass) { case 'support': setClass = 'sup'; break; } let setObj = `${setClass}E${currElite}range`; console.log(map[setObj]); } autoSelect('support', 1); O puede declarar la variable usando var y luego recuperar el valor usando el objeto de window (no recomendado)
// declared read-only variable: var support = { arr: { ins: ['g3', 'g5', 'g7', 'g10', 'g12', 'g13', 'g14', 'g15' ] } }, // object destructuring for easy to call: { arr: { ins: supE1range } } = support; function autoSelect(currClass, currElite) { let setClass = ''; switch (currClass) { case 'support': setClass = 'sup'; break; } let setObj = `${setClass}E${currElite}range`; console.log(window[setObj]); } autoSelect('support', 1);