Angular2 - 过滤对象列表。即使有真正的比较,也会清空结果列表

时间:2017-04-08 20:31:36

标签: angular typescript

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);
    };
}

我希望在控制台输出中获取值falsetruefalse以及只包含一个元素的列表(列表中的第二个元素,带有一个元素的列表) id,其值为2)。如果过滤比较的值为falsefalsefalse,我只希望获得一个空列表。但是,控制台输出是:

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);  

结果也是一个空数组。

我做错了什么? 提前致谢

1 个答案:

答案 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];