搜索
javascript - js如何递归判断两个对象是否值相等.
高洛峰
高洛峰 2017-04-10 15:46:47
[JavaScript讨论组]

举例:

var o1 = [
    {a:1, b:[{c:2}]},
    {d:[{e:{f:2}}]}
  
]

var o2 = [
    {a:1, b:[{c:2}]},
    {d:[{e:{f:2}}]}
  
]

就是里面的层级不确定.

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(3)
迷茫

相等?不递归行不?

// 这样可以不?
if(JSON.stingify(o1) == JSON.stingify(o2)) 
ringa_lee
    var testEqual = (a,b) => {
        for (var i in a) {
            if (a.hasOwnProperty(i)) {
                if (!b[i]) {
                    return false;
                }
                if (JSON.stringify(a[i])) {
                    if (!testEqual(a[i], b[i])) {
                        return false;
                    }
                } else {
                    if (!a[i] === b[i]) {
                        return false;
                    }
                }
            }
        }
        return true;
    }


是要这种感觉的吗?
不确定……没运行过。
大家讲道理

用 Json.stringfy 方法可行就是浏览器版本有要求.网上找到一个解决方案:

function forIn(obj, handler) {
    for (var i in obj) {
        if (obj.hasOwnProperty(i)) {
            handler(i, obj[i]);
        }
    }
}
function each(arr, handler) {
    for (var i = 0, len = arr.length; i < len; i += 1) {
        handler(i, arr[i]);
    }
}
if (!JSON) {
    JSON = {};
}
if (!JSON.parse) {
    JSON.parse = function(json) {
        return eval('1,' + json)
    };
}
if (!JSON.stringify) {
    (function(JSON) {
        var arr = '[object Array]',
            obj = '[object Object]';

        JSON.stringify = function(json) {
            var t = '';
            var m = Object.prototype.toString.call(json);
            if (m == arr) {
                t = ArrPartten(json);
            } else if (m == obj) {
                t = ObjectJson(json);
            } else {
                t = json;
            }
            return t;
        }

        function ObjectParse() {
            var t = '{';
            forIn(json, function(i, ele) {
                var m = Object.prototype.toString.call(ele);
                if (m == arr) {
                    t += i + ':' + ArrPartten(ele) + ',';
                } else if (m == obj) {
                    t += i + ':' + ObjectJson(ele) + ',';
                } else {

                    t += i + ':' + ele + ',';
                }
            });
            if (t.length != 1) {
                t = t.substring(0, t.length - 1);
            }
            return t + '}';
        }

        function ArrayParse() {
            var t = '[';
            each(json, function(i, ele) {
                var m = Object.prototype.toString.call(ele);
                if (m == arr) {
                    t += ArrPartten(ele) + ',';
                } else if (m == obj) {
                    t += ObjectJson(ele) + ',';
                } else {
                    t += ele + ',';
                }
            });
            if (json.length > 0) {
                t = t.substring(0, t.length - 1);
            }
            return t + ']';
        }
    }(JSON));
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号