我在JavaScript中有一個二維數組。如何在二維數組中搜索一維數組?
var arr = [['a', 'b'], ['c', 'd'], ['e', 'f'], ['g', 'h'], ['i', 'k']];
我要搜索的1-d陣列['a', 'b']
或ARR 1-d陣列['b', 'a']
。什麼將是最有效的方法? 將使用任何其他數據結構使其更高效。我添加,遍歷arr和搜索一維數組的方法。
我在JavaScript中有一個二維數組。如何在二維數組中搜索一維數組?
var arr = [['a', 'b'], ['c', 'd'], ['e', 'f'], ['g', 'h'], ['i', 'k']];
我要搜索的1-d陣列['a', 'b']
或ARR 1-d陣列['b', 'a']
。什麼將是最有效的方法? 將使用任何其他數據結構使其更高效。我添加,遍歷arr和搜索一維數組的方法。
首先,您需要定義兩個數組的「平等」意味着什麼。由於somearray == otherarray
是唯一真正的,如果兩個變量引用數組對象完全相同的情況下
(即a = [1,2]; b = [1,2]; c = a;
允許a == c
但a != b
)
這是最好的一個函數來完成。例如,areArraysEqual(a,b)
。在你的情況下,如果數組包含相同的元素,但不一定按相同的順序,此函數將需要返回true
。就個人而言,我會建議每個陣列.sort()
,然後逐個比較元素 - 排序後,a[0]
應該等於b[0]
,a[1]
等於b[1]
,依此類推。
既然你有你的數組比較函數,那麼迭代你的大數組是很簡單的事情,並且每個數組都檢查它是否等於你的單個數組。如果是,請退回您所在的位置並停止。
現在去寫一些代碼,並與一個特定的問題回來,如果您有任何:對
我不確定我是否理解,但您可以用shift()獲取第一個「元素」,然後您可以進一步操作它。
var arr = [['a', 'b'], ['c', 'd'], ['e', 'f'], ['g', 'h'], ['i', 'k']].shift();
arr; // arr is now ['a', 'b']
for(var i=0; i<arr.length;i++){
if(arr[i] == "b"){
//matched 'b'
}
}
從那裏你可以使用for循環搜索它。我希望我能正確理解你。
我與@Niet黑暗ABSOL 同意,我認爲不是壞主意通過比較一個元素之前一個用來比較長度,並且只用相同長度的數組對數組進行排序,而您發現它比排序所有一維數組更有效率。
function find(arr1d, arr2d) {
var result = [];
for (var i = 0; i < arr2d.length; ++i){
if (arr2d[i].length == arr1d.length){
var equal = true;
for (var j = 0; j < arr1d.length; ++j){
if (arr2d[i].indexOf(arr1d[j]) == -1){
equal = false;
break;
}
}
if (equal)
result.append(arr2d[i]);
}
}
return result;
}
這個解決方案沒有如此高效喜歡與排序,但如果你將整理和你不想改變你2-d數組你應該複製的數據,這是非常耗時,在這種情況下我的解決方案,我認爲比分類更有效率。
應該對我的回答發表評論:p –
我已經添加了代碼:p –
在此實例中創建哈希而不是嵌套循環更有效嗎? – BenM