javascript - 在 JavaScript 中比较 2 个数组并提取差异

标签 javascript arrays

数组1是本地存储中数据的结果

数组2是对于相同的ID(329,307,355),处理后的结果

所以我需要比较两者以通知发生了什么变化

数组 1:

[{"329":["45738","45737","45736"]},{"307":["45467","45468"]},{"355":["47921"]}]

数组 2:

[{"355":["47921","45922"]},{"329":["45738","45737","45736"]},{"307":[]}]

我需要将数组 2 与数组 1 进行比较并提取差异。

在这个例子中我想要结果

[{"355":["45922"]},{"307":[]}]

我尝试修改此代码:

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

可运行:

var array1 = [{
    "329": ["45738", "45737", "45736"]
  }, {
    "307": ["45467", "45468"]
  }, {
    "355": ["47921"]
  }],
  array2 = [{
    "355": ["47921", "45922"]
  }, {
    "329": ["45738", "45737", "45736"]
  }, {
    "307": []
  }]

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

console.log(compareJSON(array1, array2));

但是,要么我什么都没有,要么我拥有整张 table

最佳答案

您的要求(结果)尚不清楚,但这将帮助您开始。

var arr1 = [{ "329": ["45738", "45737", "45736"] }, { "307": ["45467", "45468"] }, { "355": ["47921"] }],
  arr2 = [{ "355": ["47921", "45922"] }, { "329": ["45738", "45737", "45736"] }, { "307": [] }];

var result = [];

arr2.forEach(obj => {
  var key = Object.keys(obj)[0];
  var match = arr1.find(o => o.hasOwnProperty(key));
  if (match) {
    var newObj = {};
    newObj[key] = obj[key].filter(s => match[key].indexOf(s) === -1);
    if (!obj[key].length || newObj[key].length) result.push(newObj)
  } else {
    result.push(Object.assign({}, obj));
  }
});

console.log(result);

关于javascript - 在 JavaScript 中比较 2 个数组并提取差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43744988/

相关文章:

delphi - Delphi 中的高效缓存

javascript - 如何在嵌套的 JSON 字符串中循环提取 newsid、headline 的值

c++ - 抛出不能正常工作

javascript - 在页面上 overflow hidden 的滚动上切换粘性菜单类

javascript - javascript修改后如何显示原来的圆?

java - 捕获多个复选框选择 JSP 参数

java - Android 以编程方式加载字符串资源

c++ - 动态内存分配给 char 数组

javascript - 在jqgrid中编辑行后无法显示成功消息

javascript - 每次网站访问时弹出框出现一次