举例:
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))