簡體   English   中英

僅保留兩個JSON之間的區別

[英]Keep only difference between two JSON

我有DOM樹的JSON版本,我只想保留頁面之間的區別(刪除導航頁腳...)

例:

const a = {
    id: '1',
    child: [
        {
            id: '2',
            child: [{id: '1'}, {id: '2'}]
        },
        {
            id: '3',
            child: [{id: '1'}, {id: '5'}]
        }
    ]
};

const b = {
    id: '1',
    child: [
        {
            id: '2',
            child: [{id: '1'}, {id: '4'}]
        },
        {
            id: '3',
            child: [{id: '1'}, {id: '4'}]
        }
    ]
};

具有功能

diff(a, b)

這個結果

{
    id: '1', 
    child: [
        {
            id: '2', 
            child: [{id: '2'}]

        },
        {
            id: '3', 
            child: [{id: '5'}]
        }
    ]
}

我是基於遞歸函數創建的

const diff = (a, b) => {
  if (Array.isArray(a)) {

  }

  if (typeof a === 'object') {
    // ...
    extract(a.child, b.child);
  }
}

我該怎么做呢? 是否有npm軟件包? 或使用JSON Path? 我想創建一個函數,該函數在兩個JSON文件之間刪除相等的“ 部分 ”,該函數的輸出具有相同的結構,但沒有“ 相等的部分 ”唯一的區別。

您可以做一些不同的操作,這應該為您提供正確的價值。

function diff(obj1, obj2) {
  var ret = {};
  for(var i in obj2) {
    if(!obj1.hasOwnProperty(i) || obj2[i] !== obj1[i]) {
      ret[i] = obj2[i];
    }
  }
  return ret;
};

在此處查看代碼以及示例數據https://jsbin.com/toboto/edit?js,控制台

但是,此解決方案不是遞歸的。 另外,如果有很大的不同,我建議您檢出此庫https://github.com/flitbit/diff

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM