我想编写一个比较两个对象数组的函数((一个对象包含来自数据库(indexedDB)的数据,另一个对象是来自Web服务的新鲜数据)。
我想比较两个对象,只将不存在的对象添加到数据库中。
我尝试使用grep函数执行此操作,但未获得所需的结果。
这是我所做的,我知道这是行不通的,因为将每个结果与每个结果进行比较,当我只有7个对象的数组时,我会得到49个彼此不相等的对象。
var orderNumberDifference = [];
$.each(ordersFromIDB, function(i, a) {
$.each(masterJson.orders, function(i, b) {
orderNumberDifference = $.grep(a, function(i, n) {
return a.orderno != b.orderno;
})
})
});
有什么建议吗?
编辑:是的,这将不起作用,因为您正在使用对象。 .some
应该按照下面的评论所述工作
听起来像一些漂亮的函数式编程和集合论的情况。例如,我们可以使用.filter
并执行类似的操作:
let result = ordersFromIDB.filter(el => !masterJson.orders.includes(el))
这将为我们提供ordersFromIDB
而不是masterJson.orders一部分的每个元素,如果您希望反过来,则可以将它们翻转,也可以进行对称差分:
let result = ordersFromIDB.filter(el => !masterJson.orders.includes(el))
.concat(masterJson.orders.filter(el => !ordersFromIDB.includes(el)));
我正在写我的头顶,所以不要以为一切都正常。这是一般的想法。