将2个数组与不同的值位置进行比较

时间:2014-07-26 17:59:30

标签: javascript jquery

我有两个未知数组,我想知道它们是否相等,无论它们的元素位置如何,例如:

A = [1,3,7]
B = [3,7,1]
-> return true

A = [1,3]
B = [1,3,7]
-> return false

A = [1,3,7]
B = [1,4]
-> return false

我应该先排序,然后进行比较吗?或者有更好的方法吗?

5 个答案:

答案 0 :(得分:1)

var areEqual = $(A).not(B).length == 0 && $(B).not(A).length == 0;

答案 1 :(得分:0)

您可以尝试这样:

function checkTwoArray(arr, brr) {
    var a = arr.sort();
    var b= brr.sort();
    var i = a.length;
    if (i != b.length) return false;
    while (i--) {
        if (a[i] !== b[i]) return false;
    }
    return true;
};

答案 2 :(得分:0)

有两个解决方案,一个比另一个好。

正如您所建议的那样,首先对数组进行排序然后进行比较。 (我也建议这个)

第二种方法是迭代一个数组,与第二个数组中的每个元素进行比较,并保存(和跳过)找到值的索引。 然而,最后一个解决方案有点慢而且太复杂了

第二个代码示例:

function compare(a, b)
{
    if(a.length != b.length) { return false; }
    var c = [];
    for(i=0;i<a.length;i++)
    {
        var f = false;//current value found in second array
        for(j=0;j<b.length;b++)
        {
            if(j in c) { continue; }//array c contains value j, so at this index, a value from 'a' is found in 'b' (maybe some other code should be used here, like indexOf() or jQuery.inArray())
            if(a[i] == b[j]) { c.push(j); f = true; }
        }
        if(!f)
        {
            return false;
        }
    }
    return true;
}

我不完全确定这段代码实际上是否有效(我还没有测试过)。

答案 3 :(得分:0)

您可以对字符串进行排序和比较,以检查数组是否相等:

即。 A.sort().join(',') === B.sort().join(',')


var A = [1,3,7];
var B = [3,7,1];
console.log("Equal: " + (A.sort().join(',') === B.sort().join(','));

答案 4 :(得分:0)

function compareArray(a, b) {
    if (a.length != b.length) return false;
    a.sort();
    b.sort();
    for (var i=0; i<b.length; i++){
          if (a[i] != b[i]) return false;
    }
    return true;
 }