【问题标题】:How to use contents of array as variables without using eval()?如何在不使用 eval() 的情况下将数组的内容用作变量?
【发布时间】:2010-11-22 01:17:10
【问题描述】:

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

【问题讨论】:

  • 我假设你的意思是 # 答案 N.

标签: javascript jquery arrays


【解决方案1】:

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

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]);

【讨论】:

  • JavaScript 没有真正的关联数组;你只会使用一个对象作为一个对象。如果您有诸如“__proto”(在 Firefox 中)和其他特殊名称之类的键,这可能会失败。
  • 但是,这两个 code-sn-ps 并不等价(仅作为旁注)
  • @idealmachine,JavaScript 对象是一个关联数组,它具有超出基本关联数组的一些能力,但这并不能使它不那么重要。我没有看到 Firefox 中使用 "__proto" 作为密钥导致的任何奇怪行为,您愿意详细说明吗?
  • @eBusiness:我的意思是__proto__;抱歉错字。 developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… 试试var a = {}; a['__proto__'] = "foo"; alert(a);
  • 属性通常可以被重载,奇怪的是这个不能。
【解决方案2】:

这将使填充数组更容易。

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

【讨论】:

  • @SLaks ...这不是更容易填充数组吗。
  • 你可以更聪明。看我的回答。
  • @SLaks...是的,我刚写完这篇文章就来找我了。
  • 我相信您不必提供 jQuery 对象作为上下文,只需提供 this 就可以了。
【解决方案3】:

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

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

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

var varName = "one";

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

当然,您可以以任何方式分配 varName 变量,包括在数组中循环时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2015-07-07
    • 1970-01-01
    相关资源
    最近更新 更多