Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中检测数组相等性?_Javascript_Arrays_String_Equality - Fatal编程技术网

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

如何在JavaScript中检测数组相等性?,javascript,arrays,string,equality,Javascript,Arrays,String,Equality,JavaScript中有两个数组,它们的格式如下: [{'drink':['alcohol', 'soft', 'hot']}, {'fruit':['apple', 'pear']}]; 我需要检测两个数组是否相等。如果它们以不同的顺序包含相同的元素,则认为它们相等。我该怎么做呢?这能回答你的问题吗? 你可以试试这个JSON.stringify(array1)==JSON.stringify(array2)如果希望两个数组中的顺序也相同 检查两个数组的长度 循环第一个数组,将每个变量与第二

JavaScript中有两个数组,它们的格式如下:

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

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

这能回答你的问题吗?


你可以试试这个
JSON.stringify(array1)==JSON.stringify(array2)如果希望两个数组中的顺序也相同

  • 检查两个数组的长度
  • 循环第一个数组,将每个变量与第二个数组进行比较
  • 如果
    1
    2
    都相同,则数组相等

    用于比较对象/数组的函数:
    可以通过
    for(var i=0;i通过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
    
    var arr1=[‘酒精’、‘软’、‘热’],
    arr2=['苹果','梨'],
    arr3=[‘软’、‘热’、‘酒精’];
    函数名(a1,a2){
    返回!(a1.sort()>a2.sort()| a1.sort()

    < >代码>排序< /COD>将所有元素按相同的顺序排列,如果两者都是“代码> <代码和代码> <代码>比较是错误的,这意味着它们都是相同的。

    如果它们包含不同顺序的相同元素,或者它们必须与内容和顺序相同,那么它们是否相等?重要的是什么?是否意味着还检查DIF?不同的递归排序?如果第二个数组是
    [{'fruit':['pear','apple']},{'drink':['alcohol','hot','soft']}]
    ,则认为元素与所显示的数组相等(注意pear/apple交换)大小写重要吗,也就是说,pear和pear应该被视为相同的吗?可能重复的可能重复的可能重复的可能重复的对你有用,只是记住顺序在这里很重要。是的。我只是更新了答案:)都很好:)我不是想对你的回答大喊大叫,这是一个聪明的方法。我只是想确保警员知道这件事,因为他不知道specify@Sparky说得好。我把笔记的顺序颠倒了。我还更新了我的答案,并包含了一个比较函数。当语言速度慢得多的时候,使用旧的和编程的好处…你知道你可以用Javascript比较数组吗?知道它们是大还是小你什么意思?你真的读过问题+答案吗?@Rob。。。我想是的,你检查过我下面的答案了吗?有什么不对劲吗?它告诉我“compareArrays”不是一个函数。这不是很好,因为compareArrays不是Javascript中定义的内置函数,而且使用数组类这样的基本原型也不是很好的实践。
    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
    }
    
    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