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”