我正在尝试在循环中创建多个新变量。 新变量的数量取决于另一个变量的长度(变量" list"在下面使用)。
for(var i = 0; i < list.lenght; i++)
{
var counter + i; // create new variable (i.e. counter1, counter2,...)
}
我在StackOverflow上发现了许多非常类似的问题,答案主要是使用数组(即How do I create dynamic variable names inside a loop?)。
如果我使用建议的解决方案,我是否要创建一个变量数组?所以在我的情况下,我将创建多个计数器,然后我可以为这些变量添加值,即:
counter6++;
如果不是这样,我该如何解决这个问题?
我为要求你解释一个旧的答案而道歉,但由于声誉不佳,我不能在旧答案中发表评论。
答案 0 :(得分:3)
你有一些选择:
创建全局(非最佳实践):
for(var i = 0; i < list.lenght; i++){
window['counter' + i] = 0; // create counter1, counter2,...)
}
使用对象:
var scope = {};
for(var i = 0; i < list.lenght; i++){
scope['counter' + i] = 0; // create scope.counter1, scope.counter2,...)
}
将对象与with
关键字
var scope = {};
for(var i = 0; i < list.lenght; i++){
scope['counter' + i] = 0; // create scope.counter1, scope.counter2,...)
}
with(scope){
// here you can acesess keys in the scope object like them variable on the function scope
counter0++
}
使用普通旧数组
var scope = new Array(list.length);
答案 1 :(得分:3)
您可以创建一个对象,将属性名称设置为预期的变量名称,然后使用对象解构赋值来获取具有.length
作为变量标识符的对象的属性赋值或索引;或使用数组解构为标识索引指定标识符。
let [list, obj] = ["abc", {}];
for (let i = 0; i < list.length; i++) {
obj["counter" + i] = list[i]
}
let {counter0, counter1, counter2} = obj;
console.log(counter0, counter1, counter2);
&#13;
可选地
let list = "abc";
let {0:counter0, 1:counter1, 2:counter2} = list;
console.log(counter0, counter1, counter2);
&#13;
let list = ["a","b","c"];
let [counter0, counter1, counter2] = list;
console.log(counter0, counter1, counter2);
&#13;