2つのオブジェクト間の一般的な深い差分
との2つのオブジェクトが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、boolなどの値ベースの型の配列では十分簡単ですが、オブジェクトや配列などの参照型の配列。 等しいはずの配列の例: [1,[{c: 1},2,3],{a:'hey'}] and [{a:'hey'},1,[3,{c: 1},2]] このタイプの深い値の等価性をチェックすることは非常に複雑であるだけでなく、変更の可能性を表す良い方法を理解することも必要です。