返回BMI超过30的角管

时间:2019-03-29 22:47:27

标签: angular typescript angular-pipe

我想要一个管道来返回数组中大于30的项目。JSON数组如下所示:

bmis = [
    {
        "bmi": 34.32
    },
    {
        "bmi": 23.75
    },
    {
        "bmi": 19.06
    },
    {
        "bmi": 18.69
    },
    {
        "bmi": 45.40
    },
    {
        "bmi": 37.64
    },
    {
        "bmi": 35.54
    }
]

请注意,这些bmi值对于测试结果是伪造的。

然后我的bmi管道如下:

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
    name: 'bmi'
})
export class BmiPipe implements PipeTransform {
    transform(items: any[], attr: string): any {
        let counter = 0;
        for (let i = 0; i < items.length; i++) {
            if (items[i] >= 30.0) {
                counter++;
            }
        }
        return counter;
    }
}

最后,我的模板如下所示:{{ bmis | bmi }}

为了节省空间,我没有提供组件代码。另外,管道在app.module文件中注册。 该管道不返回4,这是正确的结果。事实上。它什么也不返回。

我不确定管道代码的正确性。但是我看不到缺失的部分。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

您的代码将bmis数组视为其值是数字,但实际上它们是对象。 因此,请更改此内容:

if (items[i] >= 30.0) {
    counter++;
}

收件人:

if (items[i].bmi >= 30.0) {
    counter++;
}

答案 1 :(得分:0)

您可以使用以下代码实现所需的内容:

bmis.filter(obj=>obj.bmi > 30.0).length

filter()方法创建一个新数组,该数组包含所有通过提供的功能实现的测试的元素。

有关过滤器功能here的更多信息。