如何对比两个JSON对象,如果没有相同的键值对则新增到一个新的JSON里

现有两个JSON对象,

var jsonA = {"品牌": "AAA", "品类": "BBB", "型号": "CCC", "材质": "DDD", "空间": "EEE", "规格": "FFF", "风格":"GGG", "颜色":"HHH, "风格":"III"};
var jsonB = {"品牌": "", "品类": "", "型号": "", "材质": "", "空间": "", "规格": "", "风格":""};

已知jsonA有一些固定键值和jsonB是一样的,jsonA会有一些不确定的键值在里面
就比如当前的jsonA有两个不一样的键值,想将它们添加到jsonC,比如这样:

var jsonC = {"颜色":"HHH", "风格":"III"};

请问应该如何实现。。

阅读 5.1k
5 个回答

供参考(你的 jsonA 只有一个不一样的键值,“风格”重复了)

var jsonC = Object.keys(jsonA)
  .filter(k => !jsonB.hasOwnProperty(k))
  .reduce((o, k) => (o[k] = jsonA[k], o), {})

如果把 jsonB 的也合并进去

var setB = new Set(Object.keys(jsonB))
var jsonC = Object.keys(jsonA)
  .filter(k => !setB.delete(k))
  .reduce((o, k) => (o[k] = jsonA[k], o), {})
Array.from(setB).reduce((o, k) => (o[k] = jsonB[k], o), jsonC)

我只能想到转成js对象然后遍历比较了

var jsonA = {'品牌': 'AAA', '品类': 'BBB', '型号': 'CCC', '材质': 'DDD', '空间': 'EEE', '规格': 'FFF', '风格': 'GGG', '颜色': 'HHH'};
var jsonB = {'品牌': '', '品类': '', '型号': '', '材质': '', '空间': '', '规格': '', '风格': ''};
var jsonC = {};
for(var keyA in jsonA){
  if(jsonB[keyA] === undefined) {
    jsonC[keyA] = jsonA[keyA]
  }
}
for(var keyB in jsonB){
  if(jsonA[keyB] === undefined) {
    jsonC[keyB] = jsonB[keyB]
  }
}

可以使用 jQuery: a = $.exntend({}, a, b);

javascript@linux:~/test/p$ cat a.js
var jsonA = {
    "品牌": "AAA", 
    "品类": "BBB", 
    "型号": "CCC", 
    "材质": "DDD", 
    "空间": "EEE", 
    "规格": "FFF", 
    "风格": "GGG", 
    "颜色": "HHH"
};
var jsonB = {
    "品牌": "", 
    "品类": "", 
    "材质": "",
    "风格": ""
};
var jsonC={}
Object.keys(jsonA).filter(x=>!new Set(Object.keys(jsonB)).has(x)).forEach(item=>Object.assign(jsonC,Object.defineProperty({},item,{value:jsonA[item],enumerable:true})))
console.log(jsonC)
javascript@linux:~/test/p$ node a.js
{ '型号': 'CCC', '空间': 'EEE', '规格': 'FFF', '颜色': 'HHH' }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进