判斷兩個對象內容值是否相等


現在有兩個對象:

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
}

記錄一下我的實現過程,參考參考~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM