调用Javascript中的级联变量

时间:2018-07-28 21:33:08

标签: javascript variables concatenation

是否可以在javascript循环的每次迭代中包含变量?例如,如果我将此代码放入循环

if (e1) {item_text += '{id:"' + id[1] + '",lvl:' + e1lvl + '},<wbr>'} 
if (e2) {item_text += '{id:"' + id[2] + '",lvl:' + e2lvl + '},<wbr>'} // etc

做类似的事情

for (n = 0; n < id.length; n++) { 
  if (e/*concat var e w/var n?*/) { 
    item_text += '{id:"' + id[1] + '",lvl:' + e/*concat var e w/var n?*/lvl + '},<wbr>'
  }
}

是否有一种方法可以在每次迭代中更改var名称(e1-> e2等)中的数字,或者我是否必须保留较长的时间并自行编写所有内容线?

3 个答案:

答案 0 :(得分:1)

使用eval来提供变量名称是可能的,尽管极不推荐,但还是不建议使用:

const e1lvl1 = 'foo';
const e2lvl1 = 'bar';
for (let i = 1; i < 3; i++) {
  console.log(eval('e' + i + 'lvl1'));
}

但是最好修复脚本的体系结构,这样就不必要了:将每个e#lvl放入一个 array ,然后访问每个数组的适当索引迭代:

const elvl = [
  'foo',
  'bar'
];
let item_text = '';
for (let i = 0; i < elvl.length; i++) {
  item_text += 'lvl: ' + elvl[i] + '\n';
}
console.log(item_text);

答案 1 :(得分:0)

JavaScript中存在数组/对象是有原因的!简化您的代码。没有理由将e1,e1l,e2 ...作为变量。将它们添加到对象并通过键访问它们,或将它们添加到数组,然后遍历它们。还有许多javascript函数,可让您确保所有元素都符合特定条件。

byte

答案 2 :(得分:0)

我同意您应该更改代码以使用数组。

尽管要回答您的问题,由于您的e1e1lvl变量看起来是全局范围的,因此您可以像这样访问它们

window["e1"]
window["e1lvl"]

尝试一下

for (n = 0; n < id.length; n++) { 
  if (window["e" + n]) { 
    item_text += '{id:"' + id[n] + '",lvl:' + window["e" + n + "lvl"] + '},<wbr>';
  }
}