【问题标题】:How to unite 2 arrays with objects without repetition in JS如何在JS中将2个数组与对象合并而不重复
【发布时间】:2022-01-24 04:46:39
【问题描述】:

我有 2 个对象。

const obj1 = [{a: 1, b: 2}, {a: 2, b: 4}, {a: 8, b: 3}];
const obj2 = [{a: 1, b: 2}, {a: 3, b: 4}, {a: 8, b: 3}, {a: 7, b: 3}];

我想将它们合二为一,但不重复。 结果应该是 obj3 = [{a: 1, b: 2}, {a: 2, b: 4}, {a: 3, b: 4}, {a: 8, b: 3}, {a: 7, b: 3}];

const obj3 = obj1.map((item) => obj2.filter((i) => i !== item));

不工作。

【问题讨论】:

    标签: javascript dictionary filter


    【解决方案1】:

    问题是你正在映射一个数组,所以基本上你会在每个obj1.length 时间做一次filter

    对于filter,过滤器将删除obj1中的所有相同项,您只会得到obj2中不重复的项,您可以将它们分组。

    我建议的另一个好的解决方案是concat 两个数组和filter 它。

    const obj1 = [{a: 1, b: 2}, {a: 2, b: 4}, {a: 8, b: 3}];
    const obj2 = [{a: 1, b: 2}, {a: 3, b: 4}, {a: 8, b: 3}, {a: 7, b: 3}];
    let obj3 = obj1.concat(obj2)
    
    let obj4=obj3.filter((item,index) => obj3.indexOf(item) === index)
    console.log(obj4)

    【讨论】:

      【解决方案2】:

      您总是可以尝试循环遍历第一个条目并循环遍历第二个条目,检查是否有重复。

      【讨论】:

      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
      【解决方案3】:

      使用 lodash 库来处理数组操作很方便,就像您要询问的那样: https://lodash.com/docs/4.17.15#union

      var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
      var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
      
      _.unionWith(objects, others, _.isEqual);
      // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
      

      将 lodash 库添加到您的代码中很容易。您可以在此处下载并保存 lodash.js 文件:https://lodash.com/,或者仅使用 CDN 中的 url 并包含在您的其他脚本/脚本标签中:https://cdnjs.com/libraries/lodash.js

      【讨论】:

        猜你喜欢
        • 2019-12-20
        • 2022-01-21
        • 1970-01-01
        • 2019-02-24
        • 1970-01-01
        • 2019-09-04
        • 2017-07-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多