在二维数组中搜索并将数组列表作为数组返回

时间:2010-02-19 06:49:29

标签: javascript

如何在二维数组中搜索并将数组列表作为数组返回?

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]);
    }
}

1 个答案:

答案 0 :(得分: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属性,可以告诉您thingtheArray的位置theArray[row][col] == thing }。

请注意,我不是每次都在循环中执行theArray[row][col],而是为每一行抓取一次的子数组引用。另请注意,从理论上讲,子阵列可以有不同的长度,我不认为它们都具有相同的长度。

我建议阅读JavaScript的数组,这与传统数组完全不同。它们实际上是字典,关联数组,而不是由偏移量索引的连续内存块。当您执行theArray[5]时,您正在查找数组上名为“5”的属性,就像您说theObject['frog']时查找属性一样对象上的“青蛙”。 (并非实现无法优化,但由于JavaScript数组稀疏,因此在执行此操作时必须小心。)