1

自動で配列を作って値を代入するループを作りたいです。問題は、配列自体を自動的に生成する方法です。

for(var attGetter=1; attGetter <= num; attGetter++){
    var catesArray1 = new Array();

    for(var atttGetterArray=1; atttGetterArray <= series; attGetterArray++){
        idOfInput  = "cate"+chartGetter+"_series"+attGetterArray;
        catesArray1.push($("#"+idOfInput).val());
    }
}

catesArray1 catesArray2 catesArray3 のように、ループ自体が自動的に配列を生成するようにしたい

等々..

4

6 に答える 6

2

作成する複数の配列を保持するには、オブジェクトまたは配列が必要です。多分あなたが探しているものは次のようなものですか?

var arrayHolder = new Array();

  for(var attGetter=1; attGetter <= num; attGetter++){
  var catesArray = new Array();

  for(var attGetterArray=1; atttGetterArray <= series; attGetterArray++){
    idOfInput  = "cate"+chartGetter+"_series"+attGetterArray;
    catesArray.push($("#"+idOfInput).val());
  }
  arrayHolder.push(catesArray);
}
于 2013-02-26T03:38:43.120 に答える
1

配列をグローバル名前空間に配置したい場合は、試すことができます

window['catesArray' + attGetter] = [];
...
window['catesArray' + attGetter].push(...)

それ以外の場合は、ハッシュ オブジェクトを作成し、それを使用して参照を保持できます

var obj = {};
.....
obj['catesArray' + attGetter] = [];
.....
obj['catesArray' + attGetter].push(...)
于 2013-02-26T03:36:19.797 に答える
1

その場合、最初のループcacatesArrayからのすべての sを保持する 1 つの新しい配列を作成する必要がありますfor

var catesArrayContainer = new Array(); //<<<---------------------
for(var attGetter=1; attGetter <= num; attGetter++){
    var catesArray = new Array();

    for(var atttGetterArray=1; atttGetterArray <= series; attGetterArray++){
        idOfInput  = "cate"+chartGetter+"_series"+attGetterArray;
        catesArray.push($("#"+idOfInput).val());
    }
    catesArrayContainer.push(catesArray); //<<<--------------------
}

編集 :

これは、変数のスコープcatesArray1が制限されているために発生します。ループが次の反復に入るcatesArray1と、再初期化されるため、以前に保存された値がすべて失われます...投稿したコードでは、のすべてのインスタンスをcatesArray1別の配列に保存しており、値はforループの外側に保持されます

于 2013-02-26T03:39:18.693 に答える
1

それぞれ5つの要素を持つ4つの配列に対して、このようなことを行うことができます

yourarray=[];
for (i = 0; i <4; i++) {
     temparray=[];
    for (j = 0; j < 5; j++) {
        temparray.push($('#'+whateverID+'_'+i+'_'+j)) //your values here
    }
yourarray.push(temparray);
}

この JSFiddleで確認してください。Chrome コンソールを開いて配列を表示します

インデックスからループ内に配列を作成したい場合

eval を使用して文字列から JavaScript を評価できますが、他に方法がない限り使用しません。このFiddleで上記と eval メソッドの両方を確認できます。Chrome コンソールを開いて配列の値を表示 する eval と 2D 配列の使用を比較するだけです このjsFiddle を実行している間にChrome でコンソールを開くと、この質問のコンテキストで eval と 2darray の違いがわかります。

于 2013-02-26T03:42:30.620 に答える
0

それらをオブジェクトに割り当てる必要があります。この場合、最初の for ループの前にオブジェクト変数を作成して、すべての配列を保持します。

var allArrays = {};

for(var attGetter=1; attGetter <= num; attGetter++){
    var currentArray = allArrays['catesArray' + attGetter] = new Array();

    for(var atttGetterArray=1; atttGetterArray <= series; attGetterArray++){
        idOfInput  = "cate"+chartGetter+"_series"+attGetterArray;
        currentArray.push($("#"+idOfInput).val());
    }
}
于 2013-02-26T03:39:18.143 に答える
0

動的に名前が付けられた変数を作成して割り当てようとする代わりに、私はこれをもっと of のように考えarrayますarray。つまり、必要なすべての配列を保持する配列を作成します。

var collections = []; // Literal notation for creating an array in JS

ここからは、この配列内で作成する各値を独自の配列にすることです。

var n = 10; // Total amount of arrays you want
for (var i = 0; i < n; i++) {
    var values = [];
    // Have another loop that fills in the values array as expected
    collections.push(values); // Each element at collections[i] is its own array.
}

名前付き要素が本当に必要な場合は、{}代わりにオブジェクトだけで非常に似たようなことを行い、作成した名前で各要素を参照することができます。

var collections = {}; // Literal notation for an object in JS
var n = 10; // Total amount of arrays you want
for (var i = 0; i < n; i++) {
    var values = []; // Literal notation for an array in JS
    // Fill in the values array as desired

    var name = 'arr' + i; // How you'll refer to it in the object
    collections[name] = values;
}

ただし、配列に明示的な名前を付ける必要があるようには聞こえないが、配列の複数のレイヤーが必要なだけなので、前者をお勧めします。

于 2013-02-26T03:42:31.197 に答える