2

我有多个变量,例如“s11”和“s12”等。

var s11 = 0;
var s12 = 0;

除此之外,我还有一个包含所有这些变量名称的数组。

var wA = new Array("s11", "s12");

数组中的值稍后会根据用户活动自动添加到脚本中。

我的问题是,例如,每当变量“s11”作为数组中的一个值出现时,我都希望它变为 ++。这可以做到吗?

4

5 回答 5

1

使用变量,会让你的生活变得艰难。这是一种两者兼而有之的方法。使用关联数组,如下所示:

var count = {};
var wA = new Array("s11", "s12");


function updateArray(value) {

  wA.push(value);

  if(! (value in count) ) {
    count[value] = 0;
  }
  count[value]++;
}

然后像这样使用它:

updateArray("s11");
updateArray("s12");

现在count看起来像:{s11: 1, s12: 1}&wA看起来像:['s11', 's12']

于 2013-06-30T16:52:16.023 回答
0

您可以使用该eval()功能。它运行作为参数给出的任何代码。例如,对于++每个变量,当其名称出现在数组中时,使用:

for(variablename in wA){ // or any other way to loop through the array
    eval(variablename + "++");
}

此外,您可以像关联数组一样使用所有者对象。如果变量是全局变量,只需使用window.

for(variablename in wA){ // or any other way to loop through the array
    window[variablename]++;
}
于 2013-06-30T16:52:26.510 回答
0

如果你的s变量是全局的,那么你可以点他以下:

for (var i = wA.length; i--;)
  window[wA[i]] ++;
于 2013-06-30T16:52:29.897 回答
0

如果它们是全局变量,您可以window使用括号表示法从对象中获取它们:

window[wA[0]]; // 0

否则,我建议使用对象而不是变量:

var myVars = {
    s11 : 0,
    s12 : 0
};

myVars[wA[0]]; // 0

唯一的另一种方法是使用eval,如果您正在处理用户输入,这可能会很危险。

于 2013-06-30T16:52:39.553 回答
0

如果您的变量是全局变量,您可以执行如下所示的操作

s11 = 10;
s12 = 12;


var i = 11;

var wA = new Array(window["s" + i++], window["s" + i]);

否则,您将不得不在范围内声明变量,例如:使用this

this.s11 = 10;
this.s12 = 12;


var i = 11;

var wA = new Array(this["s" + i++], this["s" + i]);

或者您可以使用循环来推送元素

var wA = [];
for(var i=11; i<=12; i++){
    wA.push(this["s" + i]);
}

注意:起始值和结束值i取决于您的要求和实施

于 2013-06-30T16:58:12.393 回答