您如何比较两个对象的javaScript数组,只保留与数组不同的对象? [重复]

问题描述 投票:0回答:1

我想编写一个比较两个对象数组的函数((一个对象包含来自数据库(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;
                })
            })
        });

有什么建议吗?

javascript arrays object grep indexeddb
1个回答
-1
投票

编辑:是的,这将不起作用,因为您正在使用对象。 .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)));

我正在写我的头顶,所以不要以为一切都正常。这是一般的想法。

© www.soinside.com 2019 - 2024. All rights reserved.