给定javascript中的一组字典,我想合并它们,这样它们就不会包含任何重复项.举个例子

jsons1 = [{"a": "xyz"}, {"a": 12}]
jsons2 = [{"a": "xyz"}, {"a", 13}]

我想返回一个新数组,在合并时删除重复项

jsons3 = [{"a": "xyz"}, {"a": 12}, {"a": 13}]

秩序并不重要

我就是这么做的:

let jsons1 = [
    {
        "a": "xyz"
    
    }, 
    {
        "a": 4
    
    }, 
    {
        "a": 1
    
    }, 
  
]


let jsons2 = [
    {
        "a": "xyz"
    
    }, 
    {
        "a": 4
    
    }, 
    {
        "a": 6
    
    }, 
  
]

const val = [jsons1, jsons2]

let filtered = []
for(json of val) {
    for(obj of json) {
    let match = false;
    for(dict of filtered) {
        if(JSON.stringify(dict) === JSON.stringify(obj)) {
        match = true;
        break
      }
    }
    if(match == true) {
        continue
    }
    filtered.push(obj)

    }
}

console.log(filtered)

https://jsfiddle.net/awb6qnzo/6/

基本上,我创建了一个名为filtered的新数组,然后遍历每个jsonsarray.然后,我迭代过滤以判断obj是否已经在其中.

虽然有效,但效率极低.有没有更简单的方法?

编辑:将问题更改为特定值,因为前者显然不可能

给定javascript中的一组字典,我想合并它们,这样它们就不包含任何重复项(在键"id"上).例如.

jsons1 = [{"id": 1}, {"id": 12}]
jsons2 = [{"id": 1}, {"id": 3}]

我想返回一个新数组,在合并时删除重复项

jsons3 = [{"id": 1}, {"id": 3}, {"id": 12}]

推荐答案

让我们重写这个问题,假设我们有一个函数equals,首先判断两个对象是否相同.

我们希望启用jsons2中满足某些条件的所有值.

为此,我们需要找出filter个不满足条件的对象.

这个条件是jsons1中的每个对象都不等于jsons2中的对象.

另一种说法是,jsons1中的some对象等于jsons2中的对象.

jsons1.concat(
    jsons2.filter(
        (a) => !jsons1.some((b) => equals(a, b))
    )
);

你可以随心所欲地写equals,只要它运行正常.

Javascript相关问答推荐

setFinder关闭模式并重定向到url

为什么(1 + Number.Min_UTE)等于1?

将下拉分区与工具提示结合起来

我无法使用tailwind-css和reactJS修改图像的位置

如何从JavaScript中的公共方法调用私有方法?

在HTML中使用脚本变量作为背景图像源

如何在加载的元数据上使用juserc和await中获得同步负载?

fetch在本地设置相同来源的cookie,但部署时相同的代码不会设置cookie

窗口.getComputedStyle()在MutationObserver中不起作用

调用removeEvents不起作用

google docs boldText直到按行执行应用脚本错误

如何在ASP.NET中使用Google Charts API JavaScript将条形图标签显示为绝对值而不是负值

当输入字段无效时,我的应用程序不会返回错误

Use Location位置成员在HashRouter内为空

未加载css colored颜色 ,无法将div设置为可见和不可见

获取';无法解决导入和导入";slick-carousel/slick/slick-theme.css";';错误

将多个文本框中的输出合并到一个文本框中

将Auth0用户对象存储在nextjs类型脚本的Reaction上下文中

AG-GRIDreact 显示布尔值而不是复选框

为什么我的SoupRequest";被重置为初始值,以及如何修复它?