【问题标题】:How to merge two arrays in JavaScript and remove the duplicate items?如何在 JavaScript 中合并两个数组并删除重复项?
【发布时间】:2020-02-18 21:24:32
【问题描述】:

我有两个数组

var array1 = [{firstName:'John', age:32, email:'xyz1@email.com'}, {firstName:'Jack', age:40, email:'xyz2@email.com'}];
var array2 = [{firstName:'Jen', age:29, email:'abc1@email.com'}, {firstName:'Jack', age:40, email:'xyz2@email.com'}];

我想合并两个数组并得到下面的输出

var array3 = [{firstName:'John', age:32, email:'xyz1@email.com'}, {firstName:'Jack', age:40, email:'xyz2@email.com'}, {firstName: 'Jen', age: 29, email: 'abc1@email.com'}];

想知道在 JavaScript 中合并两个数组的最佳方法,以便我只从每个数组中获取唯一项吗?

【问题讨论】:

    标签: javascript arrays concat


    【解决方案1】:

    回答

    您可以使用 Rest Operators、Set Object 和 JSON 方法来做到这一点:

    [ ...new Set([...a1, ...a2].map(JSON.stringify)) ].map(JSON.parse);
    

    示例

    var array1 = [{firstName:'John', age:32, email:'xyz1@email.com'}, {firstName:'Jack', age:40, email:'xyz2@email.com'}];
    var array2 = [{firstName:'Jen', age:29, email:'abc1@email.com'}, {firstName:'Jack', age:40, email:'xyz2@email.com'}];
    
    function joinArrays(a1, a2) {
     return [ ...new Set([...a1, ...a2].map(JSON.stringify)) ].map(JSON.parse);
    }
    
    console.log(joinArrays(array1, array2));

    解释:

    您可以使用 Rest Operators 组合数组:

    [...a1, ...a2]
    

    您使用JSON.stringify 将对象转换为字符串:

    [...a1, ...a2].map(JSON.stringify)
    

    您将这些字符串放入Set。集合不允许重复的原始值(字符串、数字等

    new Set([...a1, ...a2].map(JSON.stringify))
    

    您使用 Rest Operator 将 Set 放入 Array

    [...new Set([...a1, ...a2].map(JSON.stringify))]
    

    您使用JSON.parse 映射数组以将字符串转换回对象,减去重复项。

    [ ...new Set([...a1, ...a2].map(JSON.stringify)) ].map(JSON.parse);
    

    【讨论】:

    • 这将从array1array2 中的对象中删除任何函数、集合、映射或任何其他复杂数据类型。如果有任何循环依赖,它也会简单地失败,例如array1[0].self = array1[0]
    • @Olian04 您是否看到 OP 提供的数组中的基本对象之外的任何函数或复杂数据类型?
    • 这不是提供错误答案的充分理由。 OP 提供了(根据 StackOverflow 的规则)一个小的可验证示例。换句话说,不一定是在现实世界中使用的确切数据。
    • @Olian04 你可以有你的看法,但如果你举一个充满原始值的数组的例子,为什么会有人假设不同?这太荒谬了。我们会整天对答案进行类型检查。这不是上下文中的“错误”答案。当您听到蹄声时,假设是马,而不是斑马。
    猜你喜欢
    • 2010-12-07
    • 1970-01-01
    • 2017-06-22
    • 2013-02-02
    • 2017-06-05
    • 1970-01-01
    • 2012-02-26
    相关资源
    最近更新 更多