动态命名变量javascript
我需要在循环中动态创建变量,但我不知道如何。 我读过有关使用eval();
但我发现它只是动态地改变变量中的值。
我需要这样的东西:
$(e).find('unidadeid').each(function () { countUnidades++; var Unidade[value inside countUnidades here] = $(this).text(); });
请清楚你的步骤。 我不是要求解决方案,而是要求帮助,作为一种学习。 谢谢 ;)
你有两个选择:
-
使用数组:
var unidades = []; $(e).find('unidadeid').each(function () { unidades.push($(this).text()); });
要么
var unidades = $(e).find('unidadeid').map(function () { return $(this).text(); }).get();
-
如果您确实想要的名称不仅仅是数字,请使用对象和括号表示法:
var unidades = {}, countUnidades = 0; $(e).find('unidadeid').each(function () { countUnidades++ unidades['Unidade' + countUnidades] = $(this).text(); });
这会创建一个具有
Unidade0
,Unidade1
等属性的对象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()); });