首页 > 解决方案 > 使用类对象数组中的值进行过滤

问题描述

我正在尝试过滤一个类对象数组,其中又嵌套了类对象。我知道这很令人困惑,我将提供一个示例代码:

//class
export class Class1{
  id:number;
  team: Teams // here  another class contains 'id' and 'name'
}
// Assume that the variable this.tmpObj contains array of Class1 objects
tmpObj:Class1[]; 

所以在这里我只想取没有 team.id 100 的 Class1 对象。

 this.tmpObj= this.tmpObj.filter(({ team }) => {
    return team.id != 100
  })

但是此代码显示 team.id 为空的错误。我尝试了其他一些过滤方式。但同样的错误。任何想法是什么错误。提前致谢。

安慰: 控制台日志

标签: angulartypescriptfilter

解决方案


为什么在这里使用一个不需要任何功能的类?TS 接口更适合这里。

interface Class1{
    id: number;
    team: Teams;
}

interface Teams {
    id: number;
    name: string;
}

const tmpObj: Class1[] = [ ... ];
const filtered = tmpObj.filter(({team}) => team.id !== 100);

工作示例:游乐场

更新:TS类

如果您坚持使用 TS 类而不是接口,则可以利用 TS参数属性在构造函数中定义和分配成员变量。

class Class2 {
    constructor(
        private id: number,
        private team: TeamClass
    ) { }
}

class TeamClass {
    constructor(
        private id: number,
        private name: string
    ) { }
}

const tmpObj2: Class1[] = [ ... ];

const filtered2 = tmpObj.filter(({team}) => team.id !== 100);
console.log(filtered2);

工作示例:游乐场


推荐阅读