두 개의 객체가 있습니다 : 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]
문자열, INT 및 부울과 같은 값 기반 형의 배열에 대한 간단한 충분히 인,하지만 올 때 처리하기 정말 어려운 도착 객체 및 배열과 같은 참조 유형의 배열.
동일해야하는 배열 예 :
[1,[{c: 1},2,3],{a:'hey'}] and [{a:'hey'},1,[3,{c: 1},2]]
이러한 유형의 깊은 가치 평등을 확인하는 것뿐만 아니라 변경 사항을 나타내는 좋은 방법을 찾는 것도 매우 복잡합니다.
newObj
DOM의 폼에서 값을 읽는 js 코드에 의해 생성됩니다. 상태를 유지하고 훨씬 쉽게하는 방법에는 여러 가지가 있지만, 연습으로 상태를 유지하고 싶습니다. 또한 다른 사람이 실제로 어떤 사람을 가지고 있는지에 대해 다른 사람들이 어떻게 대처했는지 알기 위해 선행 기술을 찾고 있습니다.