Сценарий: Мне нужна функция, которая сравнивает два 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"}]};
Или что-то подобное, вы поняли идею.
Кто-нибудь знает решение этой проблемы? Я уже нашел один плагин, но я хотел бы знать, есть ли альтернативы.
Предположим, что мы хотим сравнить два тех же объекта и вычесть, если соответствие количества поля объекта затем следует коду рева.
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
}