判断两个数组是否相等

数组属于引用数据类型,其值存储在堆中,因此我们无法简单的用[]==[]对其进行判断,但可以使用类似于深拷贝的方法将其像剥洋葱一样拨开,逐个判断

下面是本人自己写的一套算法:

function arrayEqual(arr1, arr2){
    if(arr1.length==0&&arr2.length==0){return true}
    
    function ifEqual(obj1, obj2){
        if(getType(obj1)!= getType(obj2)){
            return false
        }
        var preType= getType(obj1)
        if(preType== 'array'){
            if(obj1.length!= obj2.length){
                return false
            }
            var l= obj1.length
            for(var i= 0; i< l; i ++){
                if(ifEqual(obj1[i], obj2[i])==false){
                    return false
                }
            }
        }
        else if(preType== 'object'){
            if(getObjLen(obj1)!= getObjLen(obj2)){
                return false
            }
            for(var i in obj1){
                if(ifEqual(obj1[i], obj2[i])==false){
                    return false
                }
            }
        }else {
            if(obj1!= obj2){
                return false
            }
        }
    }
    
    function getType(obj){
        return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase()
    }
    
    function getObjLen(obj){
        var l= 0
        for(var i in obj){
            ++l
        }
        return l
    }
    
    return ifEqual(arr1, arr2)==false?false:true
}

var a=arrayEqual([1,{a:1}, [1,2,3,{a:1}]],[1,{a:1}, [1,2,3,{a:1}]])
console.log(a)
原文地址:https://www.cnblogs.com/yanze/p/7601844.html