下面是两个JSON数组。我想获得delta数据(比较两个数据集和返回两个集合中没有出现的元素)。
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]);
});
答案 0 :(得分:4)
你很接近,问题是你需要对你的对象进行深度比较。 inArray只会做一个浅浅的比较。以下代码将通过检查id
和name
的相等性来进行深入比较。此外,它允许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>