Получение различий двух json-объектов

Сценарий: Мне нужна функция, которая сравнивает два JSON-объекта и возвращает JSON-объект со списком различий и, если возможно, дополнительными данными, такими как метрики охвата.

var madrid = '{"type":"team","description":"Good","trophies":[{"ucl":"10"}, {"copa":"5"}]}';
var barca = '{"type":"team","description":"Bad","trophies":[{"ucl":"3"}]}';

Если я выполню compare(madrid, barca), то возвращаемый объект будет выглядеть примерно так:

{"description" : "Bad", "trophies":[{"ucl":"3"}, {"copa":"5"}]}; 

Или что-то подобное, вы поняли идею.

Кто-нибудь знает решение этой проблемы? Я уже нашел один плагин, но я хотел бы знать, есть ли альтернативы.

26
задан Soroush Hakami 8 December 2011 в 13:54
поделиться

1 ответ

Предположим, что мы хотим сравнить два тех же объекта и вычесть, если соответствие количества поля объекта затем следует коду рева.

var obj1 = {
  "Agent": "12819",
  "Beneficiary": "476949",
  "BillingDetail": "13772",
  "BillingInvoice": "914548",
  "Claim": "1192",
  "Customer": "656320",
  "LifeAssured": "228493",
  "Payment": "1091661",
  "Policy/Proposal": "263196",
  "Product": "9",
  "ProductComponent": "53",
  "ProductComponentOption": "2239791",
  "ProductOption": "568785",
  "TransactionDetail": "4289240"
}

var obj2 = {
  "Agent": "1289",
  "Beneficiary": "47694",
  "BillingDetail": "13772",
  "BillingInvoice": "914548",
  "Claim": "1192",
  "Customer": "656320",
  "LifeAssured": "22893",
  "Payment": "1091661",
  "Policy/Proposal": "26316",
  "Product": "2",
  "ProductComponent": "52",
  "ProductComponentOption": "223971",
  "ProductOption": "56885",
  "TransactionDetail": "4289240"
}


function diff(obj1, obj2) {
const result = {};
for(var o1 in obj1){
	if(obj2[o1]){
		result[o1] = obj1[o1] - obj2[o1];
	}
}
return result;
}   

console.log(diff(obj1,obj2))

Результат:

{
  "Agent": 11530,
  "Beneficiary": 429255,
  "BillingDetail": 0,
  "BillingInvoice": 0,
  "Claim": 0,
  "Customer": 0,
  "LifeAssured": 205600,
  "Payment": 0,
  "Policy/Proposal": 236880,
  "Product": 7,
  "ProductComponent": 1,
  "ProductComponentOption": 2015820,
  "ProductOption": 511900,
  "TransactionDetail": 0
}
0
ответ дан 28 November 2019 в 07:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: