让Reference
成为这样的类:
export class Reference {
id : number;
code : string;
label : string;
constructor(id : number, code : string, label : string {
this.id = id;
this.code = code;
this.label = label;
}
}
让我们有一个使用这个Reference
类型的组件,它有一个引用dataList
和另一个引用selectedReference
的数组,它等于数组的一个元素( 等于含义相同属性值,不代表同一对象)。我想获取数组中的元素id
等于selectedReference
的属性,所以我过滤了列表。这是类'代码:
export class filterExample {
private dataList = Array<Reference>();
private selectedValue : Reference = new Reference(2, 'R2', 'Reference 2');
constructor() {}
ngOnInit() {
for (let i : number = 1; i <= 3; i++) {
let reference : Reference = new Reference(i, `R${i}`, `Reference ${i}`);
this.dataList.push(reference);
}
let element = this.dataList.filter((item : Reference) => {
console.log(item.id === this.selectedValue.id);
item.id === this.selectedValue.id;
});
console.log(element);
};
}
我希望在控制台输出中获取值false
,true
,false
以及只包含一个元素的列表(列表中的第二个元素,带有一个元素的列表) id
,其值为2)。如果过滤比较的值为false
,false
,false
,我只希望获得一个空列表。但是,控制台输出是:
false
true
false
[]
好吧,我试着通过这样做来简化:
let element = this.dataList.filter((item : Reference) => {
console.log(item.id;
item.id === 2;
});
console.log(element);
控制台输出现在说:
1
2
3
[]
即使我做了一些愚蠢的事情:
let element = this.dataList.filter((item : Reference) => {
true;
});
console.log(element);
结果也是一个空数组。
我做错了什么? 提前致谢
答案 0 :(得分:1)
你不能从谓词函数中返回任何内容:
return item.id === this.selectedValue.id;
^-- add this.
如果您没有阻止,只能在箭头后面的表达式中省略返回。仅在这种情况下,返回是隐含的:
this.dataList.filter(item => item.id === this.selectedValue.id);
此外,过滤数组会返回一个数组。不是谓词接受的第一个元素。所以它应该是
let element = this.dataList.filter(item => item.id === this.selectedValue.id)[0];