我在JavaScript中有一个二维数组。
var arr = [['a', 'b'], ['c', 'd'], ['e', 'f'], ['g', 'h'], ['i', 'k']];
我想在arr中搜索1-d数组['a', 'b']
或1-d数组['b', 'a']
。什么是最有效的方法?
使用任何其他数据结构将使其更有效。我添加,遍历arr和搜索1-d数组的方法。
答案 0 :(得分:1)
首先,您需要定义两个数组“相等”的含义。因为somearray == otherarray
仅在两个变量引用完全相同的Array对象实例时才为真
(即。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]
等等。
既然您已经拥有了数组比较功能,那么迭代您的大数组就很简单,并且每个数组检查它是否等于您的单个数组。如果是,请返回您所在的位置并停止。
现在去编写一些代码,如果你有任何代码,可以回过头来看看:p
答案 1 :(得分:0)
我不确定我理解,但你可以使用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循环在其中搜索。我希望我能正确理解你。
答案 2 :(得分:0)
我同意@Niet the Dark Absol 我认为在逐个比较元素以比较长度之前并不是一个坏主意,并且排序数组只与相同长度的数组相比,你发现它比排序所有1-d数组更有效。
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;
}
这个解决方案不像排序那么高效,但是如果你要排序并且你不想改变你的二维数组你应该复制数据,这是非常消耗的,在这种情况下我的解决方案我认为比排序。