吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1153|回复: 0
收起左侧

[讨论] JS复杂对象(数组和对象相互嵌套)比较的讨论

[复制链接]
cqwcns 发表于 2019-12-27 13:32
以下函数实现两个复杂对象(数组和对象相互嵌套)比较,并返回差异部分。
功能已经实现,感觉代码写得有些冗余,请各位大佬指正。
[JavaScript] 纯文本查看 复制代码
function funDifference(object, other) {
let diff = {};
let vChildren;
for (var key in object) {
if (Object.prototype.toString.call(object[key]) === '[object Object]' && Object.prototype.toString.call(other[key]) === '[object Object]' && object[key] && other[key]) {

vChildren = funDifference(object[key], other[key]);
if (Object.keys(vChildren).length > 0) {
diff[key] = vChildren;
}
} else if (Object.prototype.toString.call(object[key]) === '[object Array]' && Object.prototype.toString.call(other[key]) === '[object Array]' && object[key] && other[key]) {

$.each(object[key], function (i, v) {

if (typeof v === "object") {
vChildren = funDifference(object[key], other[key]);
if (Object.keys(vChildren).length > 0) {
diff[key] = vChildren[0];
}

} else if (JSON.stringify(object[key].sort()) !== JSON.stringify(other[key].sort())) {
diff[key] = object[key];
}

})

} else if (object[key] !== other[key]) {
diff[key] = object[key];
}

}
return diff;
}

var object = {firstname: ['John','kks'], lastname: 'Cena',tel: '33',privateInfo: {privateProperty1: "false", privateProperty2: [{oo:"sd",aa:[{yy:'88',ll:'3s3'}]}]}};
var other = {firstname: ['John','kk'], lastname: 'Cena', tel: '44',privateInfo: {privateProperty1: "true", privateProperty2: [{oo:"sd",aa:[{yy:'88',ll:'33'}]}]}};

console.log(JSON.stringify(funDifference(object, other)));



输出:
[JavaScript] 纯文本查看 复制代码
{"firstname":["John","kks"],"tel":"33","privateInfo":{"privateProperty1":"false","privateProperty2":{"aa":{"ll":"3s3"}}}}

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
zhichinba + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 00:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表