我想要一个管道来返回数组中大于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,这是正确的结果。事实上。什么也没有回报。
我不确定管道代码的正确性。但我只是看不到丢失的部分。任何帮助,将不胜感激!
您的代码将bmis
数组视为其值是数字,但它们实际上是对象。所以,改变这个:
if (items[i] >= 30.0) {
counter++;
}
至:
if (items[i].bmi >= 30.0) {
counter++;
}
您可以使用以下代码实现所需内容:
bmis.filter(obj=>obj.bmi > 30.0).length
filter()方法创建一个新数组,其中包含所有传递由提供的函数实现的测试的元素。
有关Filter Function qazxsw poi的更多信息。