javascript - 如何在删除重复项的同时合并对象数组

标签 javascript arrays

我需要比较两个对象数组并删除重复项并将它们合并为一个。 我对 javascript/Typescript 有点陌生。我读过一些使用 Map、reduce、filter 来完成这项工作的博客。 这是正确的方法吗?

但是,我想知道是否可以创建它的 map 以及 Map.ContainsKey 或 Map.getvalues();

在实际问题中,对象非常庞大,有多个键,甚至数组有数百条记录。

   [
    {
        Name: Roger
        Country : spain
    },
    {
        Name:Tiger
        Counry : USA
    },
    {
        Name: Micheal
        Country: USA
    },
]


[
    {
        Name: sachin
        Country : India
    },
    {
        Name:Roger
        Counry : Spain
    },
]

output 

[
    {
        Name: Roger
        Country : spain
    },
    {
        Name:Tiger
        Counry : USA
    },
    {
        Name: Micheal
        Country: USA
    },
    {
        Name: sachin
        Country : India
    }
]

最佳答案

您可以将所需值的哈希表作为键,并推送哈希表中没有标志的元素。

var array1 = [{ Name: 'Roger', Country: 'Spain' }, { Name: 'Tiger', Counry: 'USA' }, { Name: 'Micheal', Country: 'USA' }],
    array2 = [{ Name: 'sachin', Country: 'India' }, { Name: 'Roger', Country: 'Spain' }],
    hash = Object.create(null),
    result = [array1, array2].reduce(function (r, a) {
        a.forEach(function (o) {
            var key = ['Name', 'Country'].map(k => o[k]).join('|');
            if (!hash[key]) {
                r.push(o);
                hash[key] = true;
            }
        });
        return r;
    }, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 如何在删除重复项的同时合并对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48691800/

相关文章:

python - 遍历 numpy 数组列的所有成对组合

php - CodeIgniter:为什么我的唯一表数据数组不包含任何值?

java - 翻转多维数组java

javascript - 如何将引导日期时间选择器值绑定(bind)到 Angular 模型

javascript - Sequelize 模型与模型无关

javascript - 如何使用knockout js(MVVM)在mvc中绑定(bind)值summernote编辑器

javascript - 将点击事件处理程序附加到通过 dangerouslySetInnerHTML 注入(inject)的链接的模式

javascript - 这是将 Set 转换为 Array 的简单方法吗?

c - 如何将二进制数组转换为其 2 的补码?

javascript - 如何将异步函数包装在 Promise 中?