动态创建二维Javascript数组

时间:2012-03-10 20:04:32

标签: javascript

有人可以向我展示我需要用来动态创建二维Javascript数组的javascript,如下所示吗?

所需的数组内容:

[["test1","test2","test3","test4","test5"],["test6","test7","test8","test9","test10"]]

来自alert(outterArray)的当前无效输出:

"test6","test7","test8","test9","test10","test6","test7","test8","test9","test10"

JavaScript代码:

var outterArray = new Array();
var innerArray = new Array();
var outterCount=0;
$something.each(function () { 
   var innerCount = 0;//should reset the inner array and overwrite previous values?
   $something.somethingElse.each(function () {
        innerArray[innerCount] = $(this).text();
        innerCount++;
   }
   outterArray[outterCount] = innerArray;
   outterCount++;
}
alert(outterArray);

7 个答案:

答案 0 :(得分:7)

这非常剪切和干燥,只需设置一个嵌套循环:

var count = 1;
var twoDimensionalArray =[];

for (var i=0;i<2;i++)
{
  var data = [];
  for (var j=0;j<5;j++)
  {
    data.push("Test" + count);
    count++;
  }

  twoDimensionalArray.push(data);

}

答案 1 :(得分:5)

听起来您希望将每个$something元素的文本数组映射到外部锯齿状数组中。如果是,请尝试以下

var outterArray = [];
$something.each(function () { 
  var innerArray = [];
  $(this).somethingElse.each(function () {
     innerArray.push($(this).text());
  });
  outterArray.push(innerArray);
});

alert(outterArray);

答案 2 :(得分:2)

更灵活的方法是使用原始对象,它们的使用方式与字典相似。动态消耗品和更多选项来定义索引(作为字符串)。

这里有一个例子:

var myArray = {};
myArray[12]="banana";
myArray["superman"]=123;
myArray[13]={}; //here another dimension is created
myArray[13][55]="This is the second dimension";

答案 3 :(得分:1)

您不需要自己跟踪数组长度;运行时为您维护“.length”属性。最重要的是,有.push()方法将元素添加到数组的末尾。

    // ...
    innerArray.push($(this).text());
  // ...
  outerArray.push(innerArray);

要制作新数组,只需使用[]

innerArray = []; // new array for this row

“外部”只有一个“t”: - )

答案 4 :(得分:1)

[SEE IT IN ACTION ON JSFIDDLE]如果$ something变量是jQuery搜索,你可以像这样使用.map()函数:

var outterArray = [];

var outterArray = $('.something').map(function() {

    // find .somethingElse inside current element

    return [$(this).find('.somethingElse').map(function() {
        return $(this).text();
    }).get()]; // return an array of texts ['text1', 'text2','text3']

}).get(); // use .get() to get values only, as .map() normally returns jQuery wrapped array

// notice that this alert text1,text2,text3,text4,text5,text6 
alert(outterArray);​ 

// even when the array is two dimensional as you can do this: 
alert(outterArray[0]); 
alert(outterArray[1]);

HTML:

<div class="something">
    <span class="somethingElse">test1</span>
    <span class="somethingElse">test2</span>        
    <span class="somethingElse">test3</span>           
</div>
<div class="something">
    <span class="somethingElse">test4</span>
    <span class="somethingElse">test5</span>        
    <span class="somethingElse">test6</span>           
</div>

在这里,您可以看到它在jsFiddle中使用您的预期结果:http://jsfiddle.net/gPKKG/2/

答案 5 :(得分:0)

我最近在制作Google电子表格时遇到了类似的问题,并提出了类似于BrianV的答案:

  // 1st nest to handle number of columns I'm formatting, 2nd nest to build 2d array   
  for (var i = 1; i <= 2; i++) {
    tmpRange = sheet.getRange(Row + 1, Col + i, numCells2Format); // pass/fail cells
    var d2Arr = [];
    for (var j = 0; j < numCells2Format; j++) {
      // 1st column of cells I'm formatting
      if ( 1 == i) {
        d2Arr[j] = ["center"];
      // 2nd column of cells I'm formatting
      } else if ( 2 == i ) {
        d2Arr[j] = ["left"];
      }
    }
    tmpRange.setHorizontalAlignments( d2Arr );   
  }

所以,基本上,我必须进行赋值d2Arr[index]=["some string"]才能构建我正在寻找的多维数组。由于我想格式化的单元格数量可以在不同工作表之间变化,我希望它能够推广。我正在研究的案例需要一个15维数组。将1-D阵列分配给1-D阵列中的元素最终形成了我需要的15-D阵列。

答案 6 :(得分:0)

您可以使用Array.apply

        Array.apply(0, Array(ARRAY_SIZE)).map((row, rowIndex) => {
            return Array.apply(0, Array(ARRAY_SIZE)).map((column, columnIndex) => {
                return null;
            });
        });`