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

在这种情况下,您将必须创建一个新数组来保存第一个循环中的所有cacatesArraysfor

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

您可以为 4 个数组执行类似的操作,每个数组包含 5 个元素

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中看到 above 和 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

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 回答