如何在二维数组中搜索一维数组?

时间:2014-01-11 19:55:21

标签: javascript arrays

我在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数组的方法。

3 个答案:

答案 0 :(得分:1)

首先,您需要定义两个数组“相等”的含义。因为somearray == otherarray仅在两个变量引用完全相同的Array对象实例时才为真 (即。a = [1,2]; b = [1,2]; c = a;允许a == ca != 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;
}

这个解决方案不像排序那么高效,但是如果你要排序并且你不想改变你的二维数组你应该复制数据,这是非常消耗的,在这种情况下我的解决方案我认为比排序。