比较数组

时间:2011-06-05 05:30:21

标签: javascript arrays

我有一小段代码,其中数组填充了数组。最后,我有 n 成员数组的这个数组。这些子数组总是具有相同数量的相同类型(数字)的成员(2)。我需要知道这些子阵列是否都是相同的(相同的成员,相同的位置)。这总是返回false:

[2, 0] === [2, 0]

在我的头脑中,我可以想到两种比较方式。

  • 我测试的循环(成员[i] [0] ===成员[i + 1] [0]&& member [i] [1] ===成员[i + 1] [ 1])。
  • 同一个循环,使用此测试:(member [i] .toString()=== member [i + 1] .toString())。

我认为我采取了错误的方式。你觉得怎么样?

6 个答案:

答案 0 :(得分:2)

为了我自己的想法,我认为使用循环比较两个数组是正确的。

var isTheSame = true;
for (var i in array1) {
    if (array1[i] !== array2[i]) isTheSame = false;
}

上面的循环有效,它将返回任何与类型不同的元素(三个等号===),或者值,或者长度甚至是键。

你的第二个建议不应该像第一个那样完全一样,因为你已经将它转换为一个字符串,如果array1 [0] =“true”和array2 [0] = true会发生什么?它会返回true,因为现在所有这些都是字符串,但你需要正确的比较吗?

这是我自己的想法,我希望它可能会有所帮助。

此致 [X]

答案 1 :(得分:2)

a=[2,0]; b=[2,0]; a.toString() == b.toString();

也许不是最有效的,但似乎有效,而且我是更短,更易读的解决方案的坚定支持者。

请注意xx3004关于转换为字符串时丢失的类型数据的观点值得考虑,除非您确定您的数组将由相同的数据类型组成。

答案 2 :(得分:1)

您可以使用以下内容来判断两个一维数组是否相同。如果你添加尺寸,它需要递归,但我认为这足以满足你的要求。

function testArray(a, b) {
    var aLen = a.length;
    var bLen = b.length;

    if (aLen === bLen) { // check for identical length first
        for (var i = 0; i < aLen; i++) {
            if (a[i] !== b[i]) {
                return false; // members don't match
            }
        }
        return true; // all members matched
    }
    return false; // not same length
}

http://jsfiddle.net/pgkUr/

答案 3 :(得分:1)

这就是我想出来的......

var arrayCompare = function(a, b) {

   var aLength = a.length,
       bLength = b.length;

   if (aLength != bLength) {
      return false;
   }

   for (var i = 0; i < aLength; i++) {
      if (a[i] !== b[i]) {
         return false;
      }
   }

   return true;

}

答案 4 :(得分:1)

这是一种比较两个数组的简单方法,建立在toString想法的基础上(即使是多维数据也可以):

function compareArrays(a1, a2) {
    return JSON.stringify(a1) == JSON.stringify(a2);
}

compareArrays([[2,3],[7,4],[3,3]], [[2,3],[7,4],[3,3]]) // true
compareArrays([[2,3],[7,4],[3,3]], [[7,4],[2,3],[3,3]]) // false

答案 5 :(得分:0)

如果你愿意使用Underscore,这只是一个很好的工具(我认为它比jQuery更多甚至更高),你可以大大简化这段代码。在比较数组时你不需要嵌套:我会事先弄平它们。然后它只是一个循环:

function cmpArrays( arr1, arr2 ){
    var flat = _.zip( _.flatten( arr1 ), _.flatten( arr2 ) );

    for( var elem in flat ){
        if( flat[elem][0] !== flat[elem][1] ){
            return false;
        }
    }

    return true;
}

将其概括为适用于任意数量的数组也应该非常简单。