动态命名变量javascript

时间:2013-04-03 11:48:13

标签: javascript jquery variables dynamic

我需要在循环中动态创建变量,但我不知道如何。我已经阅读了有关使用eval();的内容,但我发现它只是动态地更改变量中的值。

我需要这样的东西:

$(e).find('unidadeid').each(function () {
    countUnidades++;
    var Unidade[value inside countUnidades here] = $(this).text();
});

请明确你的步骤。我不是要求解决方案,而是要求帮助,作为一种学习方式。谢谢;)

5 个答案:

答案 0 :(得分:8)

您有两种选择:

  1. 使用数组:

    var unidades = [];
    $(e).find('unidadeid').each(function () {
        unidades.push($(this).text());
    });
    

    var unidades = $(e).find('unidadeid').map(function () {
        return $(this).text();
    }).get();
    
  2. 如果您确实想要的名称不仅仅是数字,请使用对象和括号中的符号:

    var unidades = {}, countUnidades = 0;
    $(e).find('unidadeid').each(function () {
        countUnidades++
        unidades['Unidade' + countUnidades] = $(this).text();
    });
    

    这会创建一个对象unidades,其中包含Unidade0Unidade1等属性。请注意each会收到一个索引,因此您不需要{{} 1}}除非你想要别的东西:

    countUnidades

答案 1 :(得分:5)

您始终可以使用数组:

var Unidade = [],
    countUnidades = 0;

$(e).find("unidadeid").each(function(i) {
    Unidade[countUnidades++] = $(this).text();

    // ... or Unidade.push($(this).text());
    // ... or Unidade[i] = $(this).text();
});

不要忘记DOM元素应始终具有唯一 ID,因此,如果each引用某个元素的ID,则此处不需要unidadeid次迭代。

答案 2 :(得分:2)

您的示例只是添加到我假设的具有增量值的数组。 Unidade在JSON中看起来像这样:

[
    0: "text0",
    1: "text1",
    2: "text2"
]

但是如果你想将它添加到一个对象中,你只需遍历一个字符串数组,其中数组的长度与项目列表的长度相同。实际上,您可能希望将此值附加到数据属性,其中值是变量名称,文本是元素的内容。所以HTML就是这样的:

<div data-var="a">Text1</div>
<div data-var="b">Text2</div>
<div data-var="c">Text3</div>

需要这个JS:

var unidade = {};

$("div").find('unidadeid').each(function() {
    unidade[$(this).data('var')] = $(this).text();
});

console.log(unidade);

对象看起来像这样:

{
    "a": "Text1",
    "b": "Text2",
    "c": "Text3"
}

答案 3 :(得分:1)

我怀疑你需要动态创建变量。这很少有用。

您可能想了解数据结构;特别是我认为你只想要一个数组:

var unidades = []; // declare the array outside the loop
$(e).find('unidadeid').each(function () {
    countUnidades++;
    unidades[countUnidades] = $(this).text();
});

现在你有一个数组unidades,其值是元素的text()内容。

我不确定find('unidadeid')是否是您想要的 - 这是找到所有<unidadeid>元素,这不是HTML元素,但也许您正在处理自定义XML,或者它可能只是一个例子。

答案 4 :(得分:1)

嗯,只是为了完整性,这正是你要求的,尽管这是一个可怕的想法:

$(e).find('unidadeid').each(function () {
  countUnidades++;
  var t = $(this).text();
  eval('Unidade' + countUnidades + ' = t;');
});

注意:

    如果不打开安全漏洞,
  • eval很难使用。
  • eval很慢。
  • 动态创建变量毫无意义,因为您还需要动态访问它们。
  • 变量是全局的(否则它们将是回调函数的本地变量,并在创建后立即消失)。

通常你会使用数组:

var Unidade = [];
$(e).find('unidadeid').each(function () {
  Unidade.push($(this).text());
});