如何在不使用eval()JavaScript函数

时间:2018-02-14 01:43:52

标签: javascript eval

我正在尝试编写一个从对象中提取值的脚本,但只知道对象名的第一部分,第二部分由秒变量定义。

因此,如果我写出完整的“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”的值,以便它访问正确的选项对象?

0 个答案:

没有答案