原生JS:两个对象内容是否相等的函数

1,150 阅读1分钟

还有很多可以完善的地方,后期有空再完善

function equelObject(a,b){
    // 先判断两个参数是不是对象
    if( !((a instanceof Object) && (b instanceof Object))){
        return false;
    }
    // 两个对象长度是否一致
    if(Object.keys(a).length !== Object.keys(b).length){
        return false;
    }
    // 两个对象的所有key值是否相等相同
    for(var key in a){
        // 判断属性是否是对象
        if( (a[key] instanceof Object) && (b[key] instanceof Object) ){
            // 判断属性是否是函数
            if(a[key] instanceof Function && b[key] instanceof Function){
                // 如果是函数,则判断两个变量是否指向同一个函数,不是则返回false
                if(a[key] !== b[key]){
                    console.log('其中的函数不是统一指向');
                    return false
                }
                // 如果属性是对象,但不是对象,则判断两个对象内容是否相等
            }else if( ! equelObject(a[key],b[key] ) ){
                // 如果两个对象不相等,返回否
                return false;
            }
        // 属性不是对象,则判断内容是否相等
        }else if(a[key]!==b[key]){
            return false
        }
    }
    return true;
}

let obj1 = {
    name: "xcc",
    age: 18,
    score: [1,2,3,4,5,6],
    house: {
        a: 1,
        b: 2,
        c: 3
    },
    test: function(){
        let ccc =3;
    }
}
let obj2 = {
    name: "xcc",
    age: 18,
    score: [1,2,3,4,5,6],
    house: {
        a: 1,
        b: 2,
        c: 3
    },
    test: function(){
        let ccc =3;
    }
}

let arr1 = [1,2,3,4,5]
let arr2 = [1,2,3,4,5]


console.log(equelObject(obj1,obj2));
console.log(equelObject(arr1,arr2));

输出:

其中的函数不是统一指向
false
true