我正在尝试编写一个从对象中提取值的脚本,但只知道对象名的第一部分,第二部分由秒变量定义。
因此,如果我写出完整的“Object.values(option_1)1”,它将正确返回“Pan”。但是如果我用一些等于“_1”的变量替换“_1”,除非我使用eval(),否则它不会给我相同的结果。
var option_1 = {
"First":"Peter",
"Last":"Pan",
"Type":"Boy"
};
document.getElementById("demo").innerHTML = Object.values(option_1)[1];
//Does not work
var x = 1
document.getElementById("demo2").innerHTML = Object.values('option_'+x)[1];
//Does not work
var x = 1
var xFull = 'Object.values(option_'+x+')[1]'
document.getElementById("demo3").innerHTML = xFull;
//Does work
var x = 1
var xFullEval = eval('Object.values(option_'+x+')[1]');
document.getElementById("demo4").innerHTML = xFullEval;
有没有办法获得与上一个例子相同的结果,但没有使用eval()?见这里:https://jsfiddle.net/h2oczu1d/
-------------------------更新--------------------- ----
为了澄清,我尝试了this帖子中的解决方案,以及下面的评论以及所有带有此[]结果的示例未定义。我将尝试再次详细解释,看看它是否有助于解决方案:
我将在代码中有各种预定义的选项集:
var option_1 = {
"First":"Peter",
"Last":"Pan",
"Type":"Boy"
};
var option_2 = {
"Animal":"Cat",
"Eyes":"Green",
"Type":"Bengal"
};
最后,我需要访问两个选项列表中的一个,但哪个列表是由从DOM中提取的另一个变量(即2)确定的。因此,如果x = 2,我将需要使用以“2”结尾的选项列表,如果x = 1,我将需要使用列表1.
var goodMatch = "Type";
var xDom = "2";
for(var i = 0; i < Object.keys(option_[??]).length; i++){
if (Object.keys(option_[??])[i] == goodMatch {
el[i].innerText=Object.values(option_[??])[i];
}
}
那么如何将上面例子中的“[??]”替换为“xDom”的值,以便它访问正确的选项对象?