为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript - 返回两个对象之间的差异?

JavaScript - 返回两个对象之间的差异?

守着星空守着你 2021-10-14 10:11:20
有人可以告诉我在比较这样的东西时如何返回新数据。使用原生 JavaScript。{    "48": "{\"sid\":\"48\",\"name\":\"title 1\"}",    "77": "{\"sid\":\"77\",\"name\":\"The blahblah title\"}"}与此相比{    "48": "{\"sid\":\"48\",\"name\":\"title 1\"}",    "77": "{\"sid\":\"77\",\"name\":\"The blahblah title\"}",    "83": "{\"sid\":\"83\",\"name\":\"The blahblah derp\"}",    "87": "{\"sid\":\"87\",\"name\":\"The derpy title 4\"}"}它应该只返回差异。{    "83": "{\"sid\":\"83\",\"name\":\"The blahblah derp\"}",    "87": "{\"sid\":\"87\",\"name\":\"The derpy title 4\"}"}
查看完整描述

3 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

您可以使用Object.keys()和Array.includes()来做到这一点。


var data = {

  "48": "{\"sid\":\"48\",\"name\":\"title 1\"}",

  "77": "{\"sid\":\"77\",\"name\":\"The blahblah title\"}",

  "83": "{\"sid\":\"83\",\"name\":\"The blahblah derp\"}",

  "87": "{\"sid\":\"87\",\"name\":\"The derpy title 4\"}"

};


var obj1 = {

  "48": "{\"sid\":\"48\",\"name\":\"title 1\"}",

  "77": "{\"sid\":\"77\",\"name\":\"The blahblah title\"}"

};


var result = {};

var keys = Object.keys(obj1);


for (var key in data) {

 if (!keys.includes(key)) {

  result[key] = data[key];

 }

}


console.log(result);


查看完整回答
反对 回复 2021-10-14
?
UYOU

TA贡献1878条经验 获得超4个赞

一种面向对象的方法,使用reduce.


const obj1 = {

  '48': '{"sid":"48","name":"title 1"}',

  '77': '{"sid":"77","name":"The blahblah title"}',

}


const obj2 = {

  '48': '{"sid":"48","name":"title 1"}',

  '77': '{"sid":"77","name":"The blahblah title"}',

  '83': '{"sid":"83","name":"The blahblah derp"}',

  '87': '{"sid":"87","name":"The derpy title 4"}',

}


const combinedObject = { ...obj1, ...obj2 }


const diff = Object.entries(combinedObject).reduce((acc, [key, value]) => {

  if (

    !Object.values(obj1).includes(value) ||

    !Object.values(obj2).includes(value)

  )

    acc[key] = value


  return acc

}, {})


console.log(diff)

这种方法将适用于多个对象,并且不会将一个对象视为主要对象进行比较。


查看完整回答
反对 回复 2021-10-14
?
波斯汪

TA贡献1811条经验 获得超4个赞

你可以使用Object.prototype.entries和Array.prototype.reduce。


const a = {

    "48": "{\"sid\":\"48\",\"name\":\"title 1\"}",

    "77": "{\"sid\":\"77\",\"name\":\"The blahblah title\"}"

};

const b = {

    "48": "{\"sid\":\"48\",\"name\":\"title 1\"}",

    "77": "{\"sid\":\"77\",\"name\":\"The blahblah title\"}",

    "83": "{\"sid\":\"83\",\"name\":\"The blahblah derp\"}",

    "87": "{\"sid\":\"87\",\"name\":\"The derpy title 4\"}"

};


const c = Object.entries(b).reduce((c, [k, v]) => Object.assign(c, a[k] ? {} : { [k]: v }), {});


console.log(c);


查看完整回答
反对 回复 2021-10-14
  • 3 回答
  • 0 关注
  • 363 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信