【问题标题】:Delete duplicate value from array of array从数组数组中删除重复值
【发布时间】:2019-10-19 07:36:16
【问题描述】:

我有一个对象数组,我想避免与特定键值重复值。

这是一个对象数组。

   var dept = 
 [
    {
  "department": [
    { "userName": "cds",
      "userId": "33",
      "userFirstname": "Chef",
      "userLastname": "Jone"
    },
    {
      "userName": "asset1",
      "userId": "27",
      "userFirstname": "Asset",
      "userLastname": "Ann "
    }
  ],
  "comment": "",
  "doc": null
},
{
  "department": [
    { 
      "userName": "audit1",
      "userId": "32",
      "userFirstname": "Audit",
      "userLastname": "Kim"
    },
    { "userName": "cds",
      "userId": "33",
      "userFirstname": "Chef",
      "userLastname": "Jone"
    }
  ],
  "comment": "",
  "doc": null
    }
 ];

我试图通过 javascript 返回不重复的对象。 但结果似乎不同。 我可以从一个对象数组返回值。但是,我觉得很难从数组中提取值。 如何分配数组的过滤器数组? 任何帮助,将不胜感激。 提前致谢。

   function getUnique(dept, comp) { 

  const unique = dept
   .map(e => e[comp])

 // store the keys of the unique objects
.map((e, i, final) => final.indexOf(e) === i && i)

// eliminate the dead keys & store unique objects
.filter(e => dept[e]).map(e => dept[e]);

  return unique;
  }

return getUnique(dept,'userName');

我会得到结果

 [
{
  "department": [
    { "userName": "cds",
      "userId": "33",
      "userFirstname": "Chef",
      "userLastname": "Jone"
    },
    {
      "userName": "asset1",
      "userId": "27",
      "userFirstname": "Asset",
      "userLastname": "Ann "
    }
  ],
  "comment": "",
  "doc": null
},
{
  "department": [
    { 
      "userName": "audit1",
      "userId": "32",
      "userFirstname": "Audit",
      "userLastname": "Kim"
    } 
  ],
  "comment": "",
  "doc": null
    }
  ];

但是,我得到了结果

   [
    {
"department": [
 { "userName": "cds",
    "userId": "33",
    "userFirstname": "Chef",
    "userLastname": "Jone"
 },
 {
      "userName": "asset1",
      "userId": "27",
      "userFirstname": "Asset",
      "userLastname": "Ann "
  }
],
"comment": "",
"doc": null
  }
]

【问题讨论】:

    标签: javascript list validation duplicates


    【解决方案1】:

    您可以结合使用地图和过滤器

    var dept =[{"department": [{ "userName": "cds","userId": "33","userFirstname": "Chef","userLastname": "Jone"},{"userName": "asset1","userId": "27","userFirstname": "Asset","userLastname": "Ann "}],"comment": "","doc": null},{ "department": [{ "userName": "audit1","userId": "32","userFirstname": "Audit","userLastname": "Kim"},{ "userName": "cds","userId": "33","userFirstname": "Chef","userLastname": "Jone"}],"comment": "","doc": null}];
     
    let tracker = {}
    let op = dept.map(val => {
      let department = val.department
      let filtered = department.filter(({userId}) => {
        if(tracker[userId] !== undefined ){
          return false
        } else {
          tracker[userId] = userId
          return true
        }
      })
      return {...val,department: filtered}
    })
    
    console.log(op)

    【讨论】:

    • 非常感谢。它完美地工作。感谢您的帮助。
    猜你喜欢
    • 2014-10-10
    • 2021-07-29
    • 2021-04-02
    • 2016-09-15
    • 2010-11-26
    相关资源
    最近更新 更多