【问题标题】:how to remove duplicates from two array of object by using ES6如何使用 ES6 从两个对象数组中删除重复项
【发布时间】:2019-07-05 16:52:54
【问题描述】:

我正在尝试从 userPermitDataArr 中删除重复项。

deniedModuleArr = [ { moduleName: 'Transaction fee',
    url: '/transactionfee',
    moduleClassName: 'TransactionFee' },
  { moduleName: 'Refund View',
    url: '/refundview',
    moduleClassName: 'RefundView' } ]

userPermitDataArr = [ { moduleName: 'Transaction fee',
    url: '/transactionfee',
    moduleClassName: 'TransactionFee' },
  { moduleName: 'Refund View',
    url: '/refundview',
    moduleClassName: 'RefundView' },
  { moduleName: 'Cancellation',
    url: '/cancellation',
    moduleClassName: 'Cancellation' },
  { moduleName: 'Transaction',
    url: '/transaction',
    moduleClassName: 'Transaction' } ]


 [{ moduleName: 'Cancellation',
    url: '/cancellation',
    moduleClassName: 'Cancellation' },
  { moduleName: 'Transaction',
    url: '/transaction',
    moduleClassName: 'Transaction' } ]

【问题讨论】:

  • 你打算通过删除重复的来合并两个数组?
  • 请编辑您的答案 - 添加描述究竟是什么错误/正在发生错误。

标签: javascript arrays node.js ecmascript-6 es6-promise


【解决方案1】:

从命名约定和预期结果看来,您需要从用户许可模块中过滤掉被拒绝的模块。您可以尝试关注。

首先根据上面创建的集合创建userPermitDataArrSetfilteruserPermitDataArr

let deniedModuleArr = [{ moduleName: 'Transaction fee',url: '/transactionfee',moduleClassName: 'TransactionFee' },{ moduleName: 'Refund View',url: '/refundview',moduleClassName: 'RefundView' } ];
let userPermitDataArr = [ { moduleName: 'Transaction fee',url: '/transactionfee', moduleClassName: 'TransactionFee' },{ moduleName: 'Refund View',url: '/refundview',moduleClassName: 'RefundView' },{ moduleName: 'Cancellation',url: '/cancellation',moduleClassName: 'Cancellation' },{ moduleName: 'Transaction',url: '/transaction',moduleClassName: 'Transaction' } ];
    
let deniedModuleSet = deniedModuleArr.reduce((a,c) => a.add(c.moduleName), new Set());
userPermitDataArr = userPermitDataArr.filter(v => !deniedModuleSet.has(v.moduleName));
console.log(userPermitDataArr);

【讨论】:

    【解决方案2】:

    使用HashSet 这种方法也可用于检查嵌套结构的对象相等性。

    const aStr = firstArr.map(o => JSON.stringify(o));
    const bStr = secondArr.map(o => JSON.stringify(o));
    
    const set = new Set();
    set.add(...aStr);
    set.add(...bStr);
    
    console.log([...set.values()].map(o => JSON.parse(o)));
    

    【讨论】:

      猜你喜欢
      • 2018-08-15
      • 2019-05-01
      • 2018-06-02
      • 1970-01-01
      • 2018-03-29
      • 2022-12-05
      • 1970-01-01
      • 2023-03-24
      • 2017-04-10
      相关资源
      最近更新 更多