2010-02-19 67 views
1

如何在二維數組中搜索並將數組列表作爲數組返回?在二維數組中搜索並將數組列表作爲數組返回

var dataSet = new Array(new Array()); 
function searchAsset(){ 
    dataSet.length = 0; 
    var fileName = document.getElementById("fileName").value; 
    var arr = new Array(["view_page.psd","test"],["ok_test.jpg","yes","kk"],["new_banner_2009.fla","good"],["gps-new-web.html","hot"]); 
    var re = new RegExp(fileName ,'i'); 
    var res = null; 
    for(var i = 0;i<arr.length;i++){ 
      var newArr = arr[i][0]; 
      //alert(newArr+":"+newArr.match(re)); 
      var res = newArr.match(re); 
     if(res != null){ 
      dataSet.push("["+arr[i]+"]"); 
     } 
    } 
    alert("Final --- "+dataSet); 
    for(var m = 0;m<dataSet.length;m++){ 
     alert(dataSet[m]); 
    } 
} 
+0

不要粘貼HTML,只是代碼,並使用代碼格式 – 2010-02-19 06:51:43

回答

2

此:

var dataSet = new Array(new Array()); 

...是不是一個二維數組。它的結果是一個數組(最初)是一個元素,它是對另一個數組(最初)爲零的元素的引用。你會來在JavaScript二維陣列最接近的是陣列,比如數組:

function create2DArray(rows, columns) { 
    var outer, index; 

    outer = new Array(rows); 
    for (index = 0; index < rows; ++index) { 
     outer[index] = new Array(columns); 
    } 

    return outer; 
} 

通過這樣的事情搜索很簡單:

function find(thing, theArray) { 
    var results, col, row, subArray; 

    results = []; // Empty array 
    for (row = 0; row < theArray.length; ++row) { 
     subArray = theArray[row]; 
     for (col = 0; col < subArray.length; ++col) { 
      value = subArray[col]; 
      if (value == thing) { // or whatever your criterion 
       results.push({row: row, col: col}); 
      } 
     } 
    } 

    return results; 
} 

,創建了一個數組對象,每個對象都有一個colrow屬性,它告訴你theArray中的thingtheArray[row][col] == thing

請注意,我不是每次都在做循環中的theArray[row][col],我爲每一行抓取子陣列參考一次。還要注意,由於理論上子陣列可能有不同的長度,我不認爲它們都具有相同的長度。

我推薦閱讀JavaScript的數組,它與傳統數組差別很大。他們真的是字典,聯想數組,而不是由偏移索引的連續內存塊。當你做theArray[5]時,你正在查找一個屬性在數組上被稱爲「5」,就像當你說theObject['frog']時你正在物體上查找一個屬性「青蛙」。 (並不是說實現不能優化,但是由於JavaScript數組很稀疏,所以這樣做時他們必須小心。)