动态创建一个二维的Javascript数组

3

有人能向我展示我需要使用的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);

1
输入是什么样子的? - pimvdb
7个回答

9
这很简单,只需设置嵌套循环:
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);

}

7

看起来你想将每个$something元素的文本数组映射到外部的嵌套数组中。如果是这样,请尝试以下操作:

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

alert(outterArray);

2
更灵活的方法是使用原始对象,它们的使用方式与字典类似。可以动态扩展,并且有更多的选项来定义索引(如字符串)。
以下是一个示例:
var myArray = {};
myArray[12]="banana";
myArray["superman"]=123;
myArray[13]={}; //here another dimension is created
myArray[13][55]="This is the second dimension";

1

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

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

要创建一个新的数组,只需使用[]

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

另外,“outer”只有一个“t” :-)


1

[在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/


0

最近我在处理谷歌电子表格时遇到了类似的问题,并想出了与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维数组分配给1维数组中的元素最终生成了我需要的15维数组。


0

你可以使用 Array.apply

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接