首页 > js如何递归判断两个对象是否值相等.

js如何递归判断两个对象是否值相等.

举例:

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

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

就是里面的层级不确定.


    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));
}

相等?不递归行不?

// 这样可以不?
if(JSON.stingify(o1) == JSON.stingify(o2)) 
【热门文章】
【热门文章】