Javascript 比较对象并拉出深度差异

Javascript 比较对象并拉出深度差异,javascript,arrays,recursion,Javascript,Arrays,Recursion,在我的Node/MongoDB后端,我正在做一些后期处理,以便在记录中发生更改时生成注释。因此,第一步是获取记录的pre和post更新版本。然后我想比较这两个,以确定记录中发生变化的部分。我下面的解决方案可以工作,但它返回包含更改的根级别属性。我需要比这更细粒度的东西——因为我有一个数组--“history”,嵌入在根级别元素中,还有一个数组--“services” 那么,以下面的两个对象为例,有没有一种方法可以将obj2的“history”数组中的最后一个元素拉出来——因为,在本例中,这就是更

在我的Node/MongoDB后端,我正在做一些后期处理,以便在记录中发生更改时生成注释。因此,第一步是获取记录的
pre
post
更新版本。然后我想比较这两个,以确定记录中发生变化的部分。我下面的解决方案可以工作,但它返回包含更改的根级别属性。我需要比这更细粒度的东西——因为我有一个数组--“history”,嵌入在根级别元素中,还有一个数组--“services”

那么,以下面的两个对象为例,有没有一种方法可以将obj2的“history”数组中的最后一个元素拉出来——因为,在本例中,这就是更改的内容,这就是我在生成便笺时需要输入的内容

顺便说一句,如果有下划线或Lodash的方法来处理这个问题,我也完全同意

以下是我现在掌握的代码:

const obj={
_id:1,
服务:[
{
_id:23,
服务:“服务一号”,
历史:[
{
_身份证号码:33,
舞台:“舞台”
}
]
},
{
_id:24,
服务:“服务二号”,
历史:[
{
_身份证号码:44,
舞台:“舞台”
}
]
},
]
};
常数obj2={
_id:1,
服务:[
{
_id:23,
服务:“服务一号”,
历史:[
{
_身份证号码:33,
舞台:“舞台”
}
]
},
{
_id:24,
服务:“服务二号”,
历史:[
{
_身份证号码:45,
舞台:“舞台舞”
},
{
_身份证号码:44,
舞台:“舞台”
}
]
},
]
};
让diff=Object.keys(obj).reduce((diff,key)=>{
if(obj[key]==obj2[key])返回差异
返回{
…不同,
[键]:obj2[键]
}
}, {})

console.log('diff:',diff)您可以使用解构赋值

let {services:[,{history:[...data]}]} = obj2;

console.log(data.pop());

您可以使用分解分配

let {services:[,{history:[...data]}]} = obj2;

console.log(data.pop());

@Muirik分配给
历史
属性的数组。如果最多只能使用2个元素,则可以使用
let{services:[,{history:[,data]}]}=obj2history
属性的数组。如果最多只能使用2个元素,则可以使用
let{services:[,{history:[,data]}]}=obj2