【发布时间】:2020-10-17 18:56:00
【问题描述】:
我正在共享 stackblitz url,因为 Javascript 对象很长并且不适合正文。第一个对象(objOne)是原始对象,第二个对象(objTwo)有一些变化。
我发现很难遍历并找出一些唯一 ID 的差异。所有权信息列表数组包含两个对象,并有一个唯一的 id 键,然后遍历到 ContractorLegalIssue(它没有对象,我们必须检查包含 LegalIssueEntry 的对象,它不是一个空数组),它有 ContractorLegalIssueID、LegalIssueTypeID作为唯一键,然后遍历到 LegalIssueEntry(它也有 n 个对象),它具有 LegalIssueEntryID、ContractorLegalIssueID 作为唯一键,然后到 LegalIssueDetail 进行比较并取出具有差异的键以及一些其他键“id”、“type”、“LegalIssueFieldTypeID”、“LegalIssueTypeID”。
差异的最终结果应该是这样的。
{
difference: [
{
id: 1,
ContractorLegalIssue: [
{
ContractorLegalIssueID: 1597,
LegalIssueTypeID: 1,
LegalIssueEntry: [
{
LegalIssueEntryID: 1151,
ContractorLegalIssueID: 1597,
LegalIssueDetail: [
{
id: 2,
value: "changed pos1",
"type": "Text",
"LegalIssueFieldTypeID": 2,
"FieldDetailText": "changed pos1",
"LegalIssueTypeID": 1
}
]
}
]
}
]
},
{
id: 2,
ContractorLegalIssue: [
{
ContractorLegalIssueID: 1599,
LegalIssueTypeID: 2,
LegalIssueEntry: [
{
LegalIssueEntryID: 1154,
ContractorLegalIssueID: 1599,
LegalIssueDetail: [
{
"id": 9,
"value": "4",
"type": "INT",
"LegalIssueTypeID": 2,
"LegalIssueFieldTypeID": 9,
"FieldDetailInt": 4
},
{
"id": 10,
"value": "changed for owner",
"type": "Text",
"LegalIssueTypeID": 2,
"LegalIssueFieldTypeID": 10,
"FieldDetailText": "changed for owner"
}
]
}
]
}
]
}
]
}
请帮帮我。
【问题讨论】:
-
这能回答你的问题吗? Generic deep diff between two objects
-
@igg 它可能有助于发现差异,但它无助于获得我也需要的唯一 ID 以及差异。那些唯一 ID 没有改变它们的价值,但我需要它们。
标签: javascript arrays angular object data-structures