转换模板文字以在没有 eval 的情况下检索对象的值
convert template literal to retrieve object's value without eval
// 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;
以及在 supE1range
对象中 sup
和 1
之间动态变化的函数:
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);
如您所见,eval(setObj)
将获得 supE1range
的值,因为该字符串与对象名称匹配。
现在如何在没有 eval
的情况下完成它?
我正在搜索相关的 questions/answers 但没有满足我的需求。
嗯..不要介意 'dynamically change' 因为它只是代码的一部分,不需要放在这里
我的建议是不要通过解构创建变量,而是尝试创建一个对象(map
在这种情况下)以使用您指定的键保存值。
然后通过查找 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);
或者您可以使用 var
声明变量,然后使用 window
对象检索值(不推荐)
// 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);
// 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;
以及在 supE1range
对象中 sup
和 1
之间动态变化的函数:
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);
如您所见,eval(setObj)
将获得 supE1range
的值,因为该字符串与对象名称匹配。
现在如何在没有 eval
的情况下完成它?
我正在搜索相关的 questions/answers 但没有满足我的需求。
嗯..不要介意 'dynamically change' 因为它只是代码的一部分,不需要放在这里
我的建议是不要通过解构创建变量,而是尝试创建一个对象(map
在这种情况下)以使用您指定的键保存值。
然后通过查找 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);
或者您可以使用 var
声明变量,然后使用 window
对象检索值(不推荐)
// 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);