Javascript 如何从具有两个唯一键的对象数组中删除重复对象

Javascript 如何从具有两个唯一键的对象数组中删除重复对象,javascript,arrays,reactjs,duplicates,Javascript,Arrays,Reactjs,Duplicates,因此,我有一个对象数组,我正在尝试删除重复的对象。例如,假设我的对象数组包含以下数据: [{TERM_CD: "220181", CRS_SUBJ_CD: "LALS", CRS_SUBJ_DESC: "Latin American &Latino Studies", CRS_NBR: "127", CRS_TITLE: "Latin American Music", …}, {TERM

因此,我有一个对象数组,我正在尝试删除重复的对象。例如,假设我的对象数组包含以下数据:

[{TERM_CD: "220181", CRS_SUBJ_CD: "LALS", CRS_SUBJ_DESC: "Latin American &Latino Studies", CRS_NBR: "127", CRS_TITLE: "Latin American Music", …}, 
{TERM_CD: "220101", CRS_SUBJ_CD: "MUS", CRS_SUBJ_DESC: "Music", CRS_NBR: "127", CRS_TITLE: "Latin American Music", …}, etc...]
这是我用来删除重复项的removeDup函数:

removeDup(data, key) {
    return [
      ...new Map(
        data.map(x=>[key(x), x])
      ).values(),
    ];
  }
例如,如果我像这样调用remove dup函数,那么其中一个对象将被删除,因为它们都具有相同的crs_标题

const noDupArr = this.removeDup(printArr, x => x.CRS_TITLE);

因此,我的目标是尝试删除CRS_Subc_CD和CRS_NBR两个键上的重复项,但我不知道如何继续这样做。我尝试在removeDup函数中添加另一个关键参数,但没有成功。有没有解决这个问题的想法。提前谢谢你

您可以维护一个用于筛选的
键数组,然后使用
Map
获取唯一值。下面是一个重复数据的示例:

var数据=[{TERM_CD:“220181”,CRS_subc_CD:“LALS”,CRS_subc_DESC:“拉丁美洲和拉丁美洲研究”,CRS_NBR:“127”,CRS_TITLE:“拉丁美洲音乐”},
{TERM_CD:“220101”,CRS_sub_CD:“MUS”,CRS_sub_DESC:“音乐”,CRS_NBR:“127”,CRS_TITLE:“拉丁美洲音乐”},{TERM_CD:“220101”,CRS_sub_CD:“MUS”,CRS_sub_DESC:“音乐”,CRS_NBR:“127”,CRS_TITLE:“拉丁美洲音乐”};
变量键=['CRS_subc_CD','CRS_NBR'];
var result=[…新映射(data.Map(p=>[keys.Map(k=>p[k]).join('|'),p])).values();

控制台日志(结果)我的目标是尝试删除CRS_Subc_CD和CRS_NBR两个键上的重复项。如果您的
removeDup
函数正在运行,那么为什么不使用其他要移除的键调用它两次呢?两次调用它并不能真正解决问题,因为它会移除某些不应该移除的对象。您可以考虑使用Map,其中title是key,full obj是value。如果已经存在,不要添加其他添加。@Henrique Viana有效!我以前没看过这个问题。谢谢误报:
{CRS|u sub|CD:“foo”,CRS|u NBR:“bar”}
{CRS|u sub|CD:“foo|bar”,CRS|u NBR:“}
{CRS|u sub CD:“foo|”,CRS|NBR:“bar”