【问题标题】:Compare 2 nested JSON and highlight the differences them Javascript比较 2 个嵌套 JSON 并突出显示它们的差异 Javascript
【发布时间】:2020-10-19 05:25:04
【问题描述】:

我正在处理需要比较 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));

结果可以在控制台看到。

【问题讨论】:

  • 您希望如何突出显示更改的值?
  • @Moutah 像黄色背景,使用 css
  • 所以,这不是 JSON。更新值时,您需要跟踪更新的是哪一个。那将在另一个对象或另一个函数中。
  • @Moutah 我该怎么做?有什么例子吗?

标签: javascript html arrays json javascript-objects


【解决方案1】:

我会在此处添加您缺少的功能(突出显示差异):

改变

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

收件人:

  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];

【讨论】:

  • 谢谢,但它给出了一个语法错误(意外的标记'>')这里 obj2[i]->diffent = true;
  • 对,改成obj2[i]['diffent'] = true
  • 超级。请将答案标记为正确。它对其他人可能有用:)
  • 它是高亮整个对象,我只想高亮改变的值
  • 什么意思?请进一步解释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-06
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
  • 2015-08-26
  • 2013-06-10
相关资源
最近更新 更多