判断两个对象内容值是否相等

时间:2020-09-24 22:04:06   收藏:0   阅读:63

现在有两个对象:

let a = {name: ‘zj‘, tel: ‘123‘, sex: 0, id: 1}
let b = {name: ‘zj‘, tel: ‘123‘, sex: 0, id: 1}

如何判断对象a和对象b相等呢?

a==b //false
Object.is(a,b) //false

这个时候需要自己定义一个方法来判断对象内容值是否相等,代码如下:
function objEqual(a, b) {
    if (Object.keys(a).length !== Object.keys(b).length) {
        return false
    }
    for (let key in a) {
        if (b[key] === undefined) {
            return false
        }
        if (a[key] !== b[key]) {
            return false
        }
    }
    return true
}

但是,如果涉及到对象内部还存在复式结构的,比如:

let c = {name: ‘zj‘, tel: ‘123‘, sex: 0, id: 1, obj: {name: ‘111‘}}
let d = {name: ‘zj‘, tel: ‘123‘, sex: 0, id: 1, obj: {name: ‘1111‘}}

这样如何解决呢?

回答:采用嵌套就可以啦~~

代码如下:
function objEqual(a, b) {
    if (Object.keys(a).length !== Object.keys(b).length) {
        return false
    }
    for (let key in a) {
        if (b[key] === undefined) {
            return false
        }
        if (typeof(b[key]) === ‘function‘ || typeof(a[key]) === ‘function‘) {
            throw new Error(‘type error‘)
        }
        if (typeof(b[key]) != typeof(a[key])) {
            return false
        }
        if (typeof(a[key]) === ‘object‘) {
            return objEqual(a[key], b[key])
        }
        if (a[key] !== b[key]) {
            return false
        }
    }
    return true
}

记录一下我的实现过程,参考参考~~

 
评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!