問題:計算兩個深層嵌套JavaScript 物件之間的深層差異,結合表示技術來清楚了解識別變化。
詳細資料:給定兩個對象, oldObj 和 newObj,需要自訂 diff 演算法來確定它們之間的差異,包括值、結構和陣列順序的變化。輸出應以清晰且可 JSON 序列化的方式表示。
解決方案:
自訂類別deepDiffMapper 旨在解決此問題問題:
var deepDiffMapper = function () { return { // Constants representing change types VALUE_CREATED: 'created', VALUE_UPDATED: 'updated', VALUE_DELETED: 'deleted', VALUE_UNCHANGED: 'unchanged', map: function(obj1, obj2) { // Algorithm for comparing objects return diff; }, compareValues: function (value1, value2) { // Logic for determining value changes return result; }, // Helper functions to identify object types ... } }();
用法:
用法:var result = deepDiffMapper.map(oldObj, newObj);
用法:
輸出:
map 方法傳回一個表示兩個輸入物件之間的差異。該物件的鍵對應於 newObj 中的屬性。每個值本身都是一個具有以下屬性的物件:
var oldObj = { a: 'i am unchanged', b: 'i am deleted', e: { a: 1, b: false, c: null }, f: [1, { a: 'same', b: [{ a: 'same' }, { d: 'delete' }] }], g: new Date('2017.11.25') }; var newObj = { a: 'i am unchanged', c: 'i am created', e: { a: '1', b: '', d: 'created' }, f: [{ a: 'same', b: [{ a: 'same' }, { c: 'create' }] }, 1], g: new Date('2017.11.25') };
類型:更改的類型(建立、更新、刪除或未更改)
{ b: { type: 'deleted', data: undefined }, c: { type: 'created', data: 'i am created' }, e: { a: { type: 'updated', data: '1' }, b: { type: 'updated', data: '' }, d: { type: 'created', data: 'created' } }, f: { 1: { type: 'deleted', data: undefined }, 2: { b: { 1: { d: { type: 'deleted', data: undefined } }, 2: { c: { type: 'created', data: 'create' } } } } } }資料:更新或新值(如果有創作或update)範例:給定下列輸入物件:map 方法將傳回以下表示差異:此表示清楚地顯示了對物件所做的更改,突出顯示建立、更新和刪除屬性。
以上是如何有效地找到並表示兩個深度嵌套的 JavaScript 物件之間的深層差異?的詳細內容。更多資訊請關注PHP中文網其他相關文章!