使用javascript .filter()删除重复的对象

时间:2019-03-26 19:50:47

标签: javascript arrays typescript

我正在尝试重构一些代码,以使用javascript过滤器功能摆脱具有相同属性的对象。

schemas = schemas.filter((schema, index, newArray) => {
            return index === schemas.findIndex(obj => obj.className == schema.className)
        })

schemas是自定义对象NameSchema的数组:

interface NameSchema {
    schemaId: string;
    className: string;
}

使用findIndex方法有两个问题,编译器抱怨NameSchema上不存在findIndex,并且数组中的许多对象具有相同的属性,但不是相同的对象。

如何使用Array.filter函数获取没有对象的类名不相同的对象的列表?

编辑

我在这里找到了答案:Remove duplicates from an array of objects in JavaScript

对于我的代码,最终看起来像这样:

schemas = schemas.filter((schema, index, self) => index === self.findIndex((obj) => (obj.className === schema.className)))

2 个答案:

答案 0 :(得分:1)

有帮助吗?

const array = [
  {id: 1, val: 'hello 1a'},
  {id: 1, val: 'hello 1b'},
  {id: 2, val: 'hello 2a'},
  {id: 2, val: 'hello 2b'},
]

const filteredArray = array.filter((obj, index, arr) => {
        return arr.map(mapObj => mapObj.id).indexOf(obj.id) === index;
 });

console.log(filteredArray)

答案 1 :(得分:0)

您应该使用schemas = [...new Set(schemas)]; -它会自动删除所有重复项。如果需要数组,请将其变回数组:

{{1}}