动态命名变量javascript

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

我需要这样的东西:

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

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

你有两个选择:

  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(); }); 

    这会创建一个具有Unidade0Unidade1等属性的对象unidades 。请注意, each收到一个索引,因此除非您需要countUnidades否则不需要countUnidades

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

你总是可以使用数组:

 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,因此如果unidadeid引用某个元素的ID,则此处不需要each迭代。

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

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

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

 
Text1
Text2
Text3

需要这个JS:

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

对象看起来像这样:

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

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

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

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

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

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

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

 $(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()); });