是否可以在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
等)中的数字,或者我是否必须保留较长的时间并自行编写所有内容线?
答案 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)
我同意您应该更改代码以使用数组。
尽管要回答您的问题,由于您的e1
和e1lvl
变量看起来是全局范围的,因此您可以像这样访问它们
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>';
}
}