两个对象之间的一般深度差异
我有两个对象:oldObj和newObj。 输入的数据oldObj用于填充表单,newObj是用户更改此表单中的数据并提交后的结果。 两个物体都很深,即。它们具有对象或对象数组等属性-它们的深度可以为n层,因此diff算法需要递归。 现在我需要不只是从弄清楚什么改变(如添加/更新/删除)oldObj来newObj,却怎么也最能代表它。 到目前为止,我的想法只是建立一个genericDeepDiffBetweenObjects将在表单上返回对象的方法,{add:{...},upd:{...},del:{...}}但随后我想到:之前一定有人需要此方法。 那么...是否有人知道可以做到这一点的库或一段代码,也许有一种更好的方式来表示差异(以仍然可序列化JSON的方式)? 更新: 我想到了一种更好的方式来表示更新的数据,方法是使用与相同的对象结构newObj,但将所有属性值都转换为表单上的对象: {type: '<update|create|delete>', data: <propertyValue>} 所以如果newObj.prop1 = 'new value'和oldObj.prop1 = 'old value'它将设置returnObj.prop1 = {type: 'update', data: 'new value'} 更新2: 当我们进入数组的属性时,它确实变得毛茸茸,因为该数组[1,2,3]应被视为等于[2,3,1],这对于基于值的类型的字符串(如string,int和bool)而言足够简单,但在涉及到引用类型的数组,例如对象和数组。 应该找到相等的示例数组: [1,[{c: 1},2,3],{a:'hey'}] and [{a:'hey'},1,[3,{c: 1},2]] 检查这种类型的深价值平等不仅很复杂,而且还找到了一种表示可能发生的变化的好方法。