2

インスタンス「s11」や「s12」などの名前の複数の変数があります。

var s11 = 0;
var s12 = 0;

それに加えて、これらの変数のすべての名前を含む配列もあります。

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

配列内の値は、ユーザーのアクティビティに応じて、後でスクリプトに自動的に追加されます。

私の問題は、たとえば変数「s11」が配列内の値として発生するたびに ++ にしたいということです。これはできますか?

4

5 に答える 5

1

変数を使用すると、人生が難しくなります。両方を行う 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

変数がグローバルである場合、以下に示すように実行できます

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 に答える
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 に答える