如何从两个 JSON 数组获取增量

How can I get the delta from two JSON arrays?

本文关键字:数组 JSON 获取 两个      更新时间:2023-09-26

下面是两个JSON数组。我想获取增量数据(比较两个数据集并返回两个集中都没有出现的元素)。

var data1 = [
    { id: 1, name: "Normal" },
    { id: 2, name: "Admin" }
];
var data2 = [
    { id: 1, name: "Normal" },
    { id: 2, name: "Admin" },
    { id: 3, name: "HR" },
    { id: 4, name: "finance" }
];

预期输出:

var Result =  [
    { id: 3, name: "HR" },
    { id: 4, name: "finance" }
];

我试过这个,但没有任何运气:

$.grep(data2, function (el) { 
    if ($.inArray(el, data1) == -1) 
        diff.push([el, IDl]); 
});

你很接近,问题是你需要对你的对象进行深入比较。 inArray 只会做一个浅层比较。 以下代码将通过检查idname的相等性来进行深入比较。 此外,它允许jQuery.grep构建生成的数组,因此您无需手动执行此操作。

var data1 = [
    { id: 1, name: "Normal" },
    { id: 2, name: "Admin" }
];
var data2 = [
    { id: 1, name: "Normal" },
    { id: 2, name: "Admin" },
    { id: 3, name: "HR" },
    { id: 4, name: "finance" }
];
function compare(data1, data2) {
  return $.grep(data2, function(el) {
      return !data1.some(function(elToCompare) {
            return elToCompare.id === el.id && elToCompare.name === el.name;
        });
  });
}
$("#output").text(JSON.stringify(compare(data1, data2)));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<div id="output"></div>