如何在不使用eval()的情况下将数组内容用作变量?

时间:2010-11-22 01:17:11

标签: javascript jquery arrays

我有一个存储在数组中的变量或变量名列表。我想在循环中使用它们,但我不想使用eval()。我该怎么做呢?如果我将值存储在带引号的数组中,我必须在任何等式的右侧使用eval()来呈现值。如果我只存储变量名,我以为我会存储实际的变量,但它不能正常工作。

$(data.xml).find('Question').each(function(){
  var answer_1 = $(this).find("Answers_1").text();
  var answer_2 = $(this).find("Answers_2").text();
  var answer_3 = $(this).find("Answers_3").text();
  var answer_4 = $(this).find("Answers_4").text();
  var theID = $(this).find("ID").text();
  var theBody = $(this).find("Body").text();

  var answerArray = new Array();

  answerArray = [answer_1,answer_2,answer_3,answer_4,theID,theBody]

  for(x=0;x<=5;x++) {
    testme = answerArray[x];

    alert("looking for = " + answerArray[x] + ", which is " + testme)
  }
});

3 个答案:

答案 0 :(得分:3)

您可以将值本身放在数组中:

var answers = [
    $(this).find("Answers_1").text(),
    $(this).find("Answers_2").text(),
    $(this).find("Answers_3").text(),
    $(this).find("Answers_4").text()
];

for(x=0;x<=5;x++) {
    alert("looking for = " + x + ", which is " + answers[x])
}

编辑:甚至

var answers = $(this)
    .find("Answers_1, Answers_2, Answers_3, Answers_4")
    .map(function() { return $(this).text(); })
    .get();

如果您的答案共享一个公共类,则可以将选择器更改为$(this).find('.AnswerClass')

如果需要变量名,可以使用关联数组:

var thing = { 
    a: "Hello",
    b: "World"
};

var name = 'a';
alert(thing[name]);

答案 1 :(得分:1)

这样可以更容易地填充数组。

var answers = new Array();
$("Answers_1, Answers_2, Answers_3, Answers_4", this).text(function(index, currentText) {
  answers[index] = currentText;
});

答案 2 :(得分:0)

正如其他人所提到的,如果您可以将变量放在数组或对象中,您将能够更清晰地访问它们。

但是,您可以通过window对象访问变量:

var one = 1;
var two = 2;
var three = 3;

var varName = "one";

alert(window[varName]); // -> equivalent to: alert(one);

当然,您可以通过任何方式分配varName变量,包括循环遍历数组。