zoukankan      html  css  js  c++  java
  • 判断两个对象内容值是否相等

    现在有两个对象:

    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
    }

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

     
  • 相关阅读:
    LSTM
    Realsense D435i
    ubuntu18 realsenseD435i
    net
    test
    LSTM Accuracy
    boost x64 lib
    E0443类模板 "std::unordered_set" 的参数太多
    PropertySheet
    freetype 编译
  • 原文地址:https://www.cnblogs.com/zjingjing/p/13724039.html
Copyright © 2011-2022 走看看