如何在JavaScript中检测数组相等?

时间:2011-09-29 06:59:40

标签: javascript arrays string equality

JavaScript中有两个数组,它们都采用以下格式:

[{'drink':['alcohol', 'soft', 'hot']}, {'fruit':['apple', 'pear']}];

我需要检测两个数组是否相等。如果它们以不同的顺序包含相同的元素,则它们被认为是相等的。我该怎么做?

5 个答案:

答案 0 :(得分:6)

  1. 检查两个阵列的长度
  2. 遍历第一个数组,将每个变量与第二个数组进行比较。
  3. 如果12都相同,则数组相等。

    比较对象/数组的函数:

    通过for(var i=0; i<array.length; i++)可以实现对真正数组的循环 遍历此类对象的属性可以通过for(var i in object)完成。

    function recursiveCompare(obj, reference){
        if(obj === reference) return true;
        if(obj.constructor !== reference.constructor) return false;
        if(obj instanceof Array){
             if(obj.length !== reference.length) return false;
             for(var i=0, len=obj.length; i<len; i++){
                 if(typeof obj[i] == "object" && typeof reference[j] == "object"){
                     if(!recursiveCompare(obj[i], reference[i])) return false;
                 }
                 else if(obj[i] !== reference[i]) return false;
             }
        }
        else {
            var objListCounter = 0;
            var refListCounter = 0;
            for(var i in obj){
                objListCounter++;
                if(typeof obj[i] == "object" && typeof reference[i] == "object"){
                    if(!recursiveCompare(obj[i], reference[i])) return false;
                }
                else if(obj[i] !== reference[i]) return false;
            }
            for(var i in reference) refListCounter++;
            if(objListCounter !== refListCounter) return false;
        }
        return true; //Every object and array is equal
    }
    

    如果您不理解该功能,请随时在评论中请求解释。

答案 1 :(得分:2)

这是否回答了你的问题? How to check if two arrays are equal with JavaScript?

var equal = array1.compareArrays(array2);

答案 2 :(得分:1)

http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256BFB0077DFFD

看看这里,第二个例子是一个完全正确的函数。

可以在本页底部找到执行相同操作的类似功能。

http://zeeohemgee.blogspot.com/2006/07/comparing-and-copying-arrays-in.html

希望这有帮助

干杯

答案 3 :(得分:0)

如果您希望两个数组中的订单相同,则可以尝试此JSON.stringify(array1)===JSON.stringify(array2);

答案 4 :(得分:0)

使用Javascript,您无法检查数组是否等于,但您可以像这样比较它们:

var arr1 = ['alcohol', 'soft', 'hot'],
    arr2 = ['apple', 'pear'],
    arr3 = ['soft', 'hot', 'alcohol'];

function isSame(a1, a2){
    return !(a1.sort() > a2.sort() || a1.sort() < a2.sort());
}

console.log( isSame(arr1, arr2) ); //false
console.log( isSame(arr1, arr3) ); //true

sort将所有元素放在同一个顺序中,如果<>比较都为假,则表示两者都相同。