如何在二维数组中搜索并将数组列表作为数组返回?
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 :(得分: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;
}
创建一个对象数组,每个对象都有col
和row
属性,可以告诉您thing
中theArray
的位置theArray[row][col] == thing
}。
请注意,我不是每次都在循环中执行theArray[row][col]
,而是为每一行抓取一次的子数组引用。另请注意,从理论上讲,子阵列可以有不同的长度,我不认为它们都具有相同的长度。
我建议阅读JavaScript的数组,这与传统数组完全不同。它们实际上是字典,关联数组,而不是由偏移量索引的连续内存块。当您执行theArray[5]
时,您正在查找数组上名为“5”的属性,就像您说theObject['frog']
时查找属性一样对象上的“青蛙”。 (并非实现无法优化,但由于JavaScript数组稀疏,因此在执行此操作时必须小心。)