【发布时间】:2019-02-06 14:02:54
【问题描述】:
在我的 Node/MongoDB 后端中,我正在做一些后处理,以便在记录发生更改时生成注释。所以第一步是得到一个pre和post更新版本的记录。然后我想比较两者以识别记录中发生变化的部分。我在下面的解决方案有效 - 但它返回包含更改的根级别属性。我需要比这更精细的东西——因为我有一个数组——“历史”,嵌入在根级元素中,还有一个数组——“服务”。
因此,以我下面的两个对象为例,有没有一种方法可以提取 obj2 的“历史”数组中的最后一个元素——因为在这种情况下,这就是改变的地方,这就是我需要输入才能生成我的笔记吗?
顺便说一句,如果有 Underscore 或 Lodash 方式来处理这个问题,我也完全愿意接受。
这是我现在拥有的代码:
const obj = {
_id: 1,
services: [
{
_id: 23,
service: "serviceOne",
history: [
{
_id: 33,
stage: "stageOne"
}
]
},
{
_id: 24,
service: "serviceTwo",
history: [
{
_id: 44,
stage: "stageOne"
}
]
},
]
};
const obj2 = {
_id: 1,
services: [
{
_id: 23,
service: "serviceOne",
history: [
{
_id: 33,
stage: "stageOne"
}
]
},
{
_id: 24,
service: "serviceTwo",
history: [
{
_id: 45,
stage: "stageTwo"
},
{
_id: 44,
stage: "stageOne"
}
]
},
]
};
let diff = Object.keys(obj).reduce((diff, key) => {
if (obj[key] === obj2[key]) return diff
return {
...diff,
[key]: obj2[key]
}
}, {})
console.log('diff: ', diff);
【问题讨论】:
标签: javascript arrays recursion