我正在尝试重构一些代码,以使用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)))
答案 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}}