我有一个存储在数组中的变量或变量名列表。我想在循环中使用它们,但我不想使用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)
}
});
答案 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
变量,包括循环遍历数组。