zoukankan      html  css  js  c++  java
  • js 判断2个对象的值是否相等

    function isObjectValueEqual(a, b) {
        if((a == null && b != null) || (b == null && a != null)){
            return false;
        }
        console.info((a instanceof Array) + "<-x>" + (b instanceof Array));
        if(a instanceof Array && b instanceof Array){
            if(a.length != b.length){
                return false;
            }
            for (var i = 0; i < a.length; i++) {
                var aEle = a[i];
                var bEle = b[i];
                console.info(aEle + "<-xx>" + bEle);
                if(aEle.constructor == Object && bEle.constructor == Object){
                    if(!isObjectValueEqual(aEle, bEle)){
                        return false;
                    }
                } else if (aEle !== bEle) {
                    return false;
                }
            }
            for (var i = 0; i < b.length; i++) {
                var aEle = a[i];
                var bEle = b[i];
                console.info(aEle + "<-xxx>" + bEle);
                if(aEle.constructor == Object && bEle.constructor == Object){
                    if(!isObjectValueEqual(aEle, bEle)){
                        return false;
                    }
                } else if (aEle !== bEle) {
                    return false;
                }
            }
        } else if(a.constructor == Object && b.constructor == Object){
            var aProps = Object.getOwnPropertyNames(a);
            var bProps = Object.getOwnPropertyNames(b);
            if (aProps.length != bProps.length) {
                return false;
            }
            for (var i = 0; i < aProps.length; i++) {
                var propName = aProps[i];
                console.info(propName + ":" + a[propName] + "<->" + b[propName], a[propName].constructor, b[propName].constructor);
                if(a[propName].constructor == Object && b[propName].constructor == Object){
                    if(!isObjectValueEqual(a[propName], b[propName])){
                        return false;
                    }
                } else if (a[propName] instanceof Array && b[propName] instanceof Array) {
                    if(!isObjectValueEqual(a[propName], b[propName])){
                        return false;
                    }
                } else if (a[propName] !== b[propName]) {
                    return false;
                }
            }
            for (var i = 0; i < bProps.length; i++) {
                var propName = bProps[i];
                console.info(propName + ":" + a[propName] + "<-->" + b[propName]);
                if(a[propName].constructor == Object && b[propName].constructor == Object){
                    if(!isObjectValueEqual(a[propName], b[propName])){
                        return false;
                    }
                } else if (a[propName] instanceof Array && b[propName] instanceof Array) {
                    if(!isObjectValueEqual(a[propName], b[propName])){
                        return false;
                    }
                } else if (a[propName] !== b[propName]) {
                    return false;
                }
            }
        }
        return true;
    }
  • 相关阅读:
    SpringBoot之SpringApplication
    IP数据库
    Android长按及拖动事件探究
    5.7之sql_model
    Linux 信号介绍
    设计模式详解及PHP实现:代理模式
    为你的AliOS Things应用增加自定义cli命令
    DRDS SQL 审计与分析——全面洞察 SQL 之利器
    下一代大数据处理引擎,阿里云实时计算独享模式重磅发布
    2135亿背后的双11项目协作怎么玩?
  • 原文地址:https://www.cnblogs.com/huanglisong/p/14066913.html
Copyright © 2011-2022 走看看