isEquel深度比较

2020-09-19  本文已影响0人  酒暖花深Q
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>对象深度比较</title>
</head>
<body>
    <script>
        //保证传入的必须是对象和不为空
        function isObject(obj){
             return  typeof obj ===  "object" && obj !== null
        }
        //全相等
        function isEqual(obj1, obj2){
           if(!isObject(obj1) || !isObject(obj2)){  
               //值类型比较(参与equl的一般不会是函数)
               return obj1 === obj2
           }
           if(obj1 === obj2){
                return true
           }
        //   两个都是数组或者对象且不相等
        //  1.先取出obj1 和obj2的 keys值,比较长度
            const obj1Keys = Object.keys(obj1);
            const obj2Keys = Object.keys(obj2);
            if(obj1Keys.length !== obj2Keys.length){
                return false
            }
            //以obj1 为基准和obj2进行递归比较
            for (let key in obj1) {
            // 比较当前 key 的 val --- 递归
            const res = isEqual(obj1[key],obj2[key])
                if(!res){
                    return false
                }
            }
            return true
        }
        obj1 = {
            a:100,
            b:100,
            c:{
                x:100,
                y:100
            }
        }
        obj2 = {
            a:100,
            b:100,
            c:{
                x:100,
                y:100
            }
        }
        console.log(isEqual(obj1,obj2))
    </script>
</body>
</html>
上一篇下一篇

猜你喜欢

热点阅读