2012-03-10 86 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數組。