Сравните 2 вложенных JSON и выделите различия между ними Javascript

Я работаю над требованием, когда мне нужно сравнить 2 объекта JSON. Сравнение JSON 1 и JSON 2 должно быть таким, чтобы результат JSON был ключами JSON1, а значения должны быть получены из JSON2. Значения следует изменять только для одних и тех же ключей с разными значениями. Кроме того, мне нужно выделить в результате только измененные значения. Вот мой код, где я смог сравнить и получить результат JSON, я только выделяю измененные значения. Могу ли я узнать, где я ошибся или чего не хватает?


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

//JSON 1

var a = {
  "name": [
    "complex"
  ],
  "dfts": [
    {
      "valuec": {
        "valuesid": "1232"
      },
      "ids": {
        "idp": "chanellp"
      }
    }
  ],
  "container": {
    "contid": "na",
    "dpvalueus": {
      "ftsme": "na"
    },
    "attributes": {
      "channelpo": "na"
    },
    "item": [
      {
        "contid": {
          "stjsk": "wher"
        },
        "quantity": "na",
        "dpvalue": {
          "valuers": "na"
        }
      }
    ]
  }
  
};

//JSON 2

var b = {
  "name": [
    "simple"
  ],
  "dfts": [
    {
      "valuec": {
        "valuesid": "75756754"
      },
      "ids": {
        "idp": "where"
        
      }
    }
  ],
  "container": {
    "contid": "360",
    "dpvalueus": {
      "ftsme": "100"      
    },
    "attributes": {
      "channelpo": "usual"
    },
    "item": [
      {
        "contid": {
          "stjsk": "stkh"
        },
        "quantity": "1",
        "dpvalue": {
          "valuers": "wholesome"
        }
      }
    ]
  }
  
};

console.log(compareJSON(a, b));

Результат можно увидеть в консоли.


person Ravi Shah    schedule 29.06.2020    source источник
comment
Как бы вы хотели выделить измененные значения?   -  person Moutah    schedule 29.06.2020
comment
@Moutah как фон желтого цвета, используя css   -  person Ravi Shah    schedule 29.06.2020
comment
Итак, это не JSON. При обновлении значений необходимо отслеживать, какое из них обновляется. Это было бы в другом объекте или с другой функцией.   -  person Moutah    schedule 29.06.2020
comment
@Moutah, как я могу это сделать? Любой пример?   -  person Ravi Shah    schedule 29.06.2020


Ответы (1)


Я бы добавил функциональность, которой вам не хватает (выделите различия) здесь:

Изменять

if(!obj1.hasOwnProperty(i) || obj2[i] !== obj1[i]) { 
  ret[i] = obj2[i]; 
} 

To:

  if(!obj1.hasOwnProperty(i)) { 
    ret[i] = obj2[i]; 
    continue;
  } 

  if( obj2[i] !== obj1[i] ) 
    {
     obj2[i]->diffent = true;
     ret[i] = obj2[i];
     continue;
    }


    ret[i] = obj2[i];
person Raffobaffo    schedule 01.07.2020
comment
Спасибо, но это дает синтаксическую ошибку (неожиданный токен '›') здесь obj2[i]-›diffent = true; - person Ravi Shah; 01.07.2020
comment
Правильно, измените его на obj2[i]['diffent'] = true - person Raffobaffo; 01.07.2020
comment
Супер. Пожалуйста, отметьте ответ как правильный. Может еще кому пригодиться :) - person Raffobaffo; 01.07.2020
comment
он выделяет весь объект, я хочу выделить только измененное значение - person Ravi Shah; 01.07.2020
comment
Что ты имеешь в виду? Пожалуйста объясните далее - person Raffobaffo; 01.07.2020
comment
Давайте продолжим обсуждение в чате. - person Ravi Shah; 01.07.2020
comment
Смотрите, у меня будет 2 сложных вложенных json с ключами для обоих json одинаковых, только значения будут разными. Результат: {ключи JSON1: значения JSON2} Но ваш код выделяет весь объект, а не измененное значение - person Ravi Shah; 01.07.2020