【问题标题】:How to find unique elements from 2 array of objects in JS如何从 JS 中的 2 个对象数组中找到唯一元素
【发布时间】:2021-05-14 14:49:00
【问题描述】:

我有以下 2 个数组,

我想将 empIds 值与 allEmps id 值进行比较,并希望将唯一值推送到新数组,

var empIds = [ 123, 321 ];

var allEmps = [ [{id: 123, name: 'Raj'}], [{id: 321, name: 'Raju'}], [{id: 931, name: 'Rahul'}];

Expected output:
                [{id: 931, name: 'Rahul'}]

我的尝试,

gridData = [];
empIds.forEach(id => {
  allEmps.forEach(series => {
    if (series[0].id !== id) {
      gridData.push(series[0]);
    }
  });
});

但是这些代码也给出了重复的数据,任何人都可以更正我的代码。谢谢。

【问题讨论】:

    标签: javascript arrays angular object mean


    【解决方案1】:

    重复是由每次迭代empIdsallEmps 引起的。

    尝试更改订单并检查每个员工记录的 ID 是否不在empIds

    gridData = [];
    allEmps.forEach(series => {
      if (empIds.indexOf(series[0].id) === -1) { // ID not found in empIds
        gridData.push(series[0]);
      }
    });
    // gridData = [ {id: 931, name: "Rahul"} ]
    

    【讨论】:

      【解决方案2】:

      试试这个:

      var empIds = [ 123, 321 ];
      var allEmps = [ [{id: 123, name: 'Raj'}], [{id: 321, name: 'Raju'}], [{id: 931, name: 'Rahul'}];
      
      var gridData = allEmps.map(arr => arr[0]).filter(emp => !empIds.includes(emp.id)) 
      
      

      你可以分步做:

      var objs = allEmps.map(arr => arr[0]) 
      // returns "[{"id":123,"name":"Raj"},{"id":321,"name":"Raju"},{"id":931,"name":"Rahul"}]"
      

      您不需要在数组中包含数组。 然后过滤不属于 empIds 的那些:

      objs.filter(emp => !empIds.includes(emp.id)) 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-02
        • 2011-02-08
        • 1970-01-01
        • 2022-01-10
        • 2014-10-13
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        相关资源
        最近更新 更多