2012-03-10 139 views
1

有人可以看到我需要使用JavaScript来动态创建一个二维Javascript Array如下所示的JavaScript吗?动态创建一个二维Javascript Array

所需的阵列的内容:从警报

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

当前无效的输出(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 2012-03-10 20:06:00

回答

5

这听起来像你想的阵图将每个$something元素的文本转换为外部锯齿状阵列。如果是的话请尝试以下

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

alert(outterArray); 
6

这是非常添油加醋,刚刚成立了一个嵌套循环:

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

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

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

要进行新的数组,只需使用[]

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

也是 “外” 只有一个 “T” :-)

1

[SEE IT IN ACTION ON JSFIDDLE]如果$变量的东西是一个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/

1

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

这里有一个例子:

var myArray = {}; 
myArray[12]="banana"; 
myArray["superman"]=123; 
myArray[13]={}; //here another dimension is created 
myArray[13][55]="This is the second dimension"; 
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-D数组分配给1-D数组中的元素最终制作出我需要的15-D数组。