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;
    }
  • 相关阅读:
    PHP写一段代码,确保多个进程同时写入一个文件成功
    PHP中的中文截取乱码问题_gb2312_utf-8
    TortoiseSVN使用详细步骤
    限制页面内部链接访问源-HTML注释
    Redis配置文件解读
    window下部署php_redis扩展
    js延迟加载,提升网页加载速度
    HTML5 LocalStorage 本地存储
    静态HTML页面不缓存js文件的方法
    寻找幸运数
  • 原文地址:https://www.cnblogs.com/huanglisong/p/14066913.html
Copyright © 2011-2022 走看看