开发者问题收集

无法在我的管道中的对象数组上使用 .filter() 或 for

2016-08-16
548

我正在创建的自定义管道存在问题。我的 Persos 是一个 Perso 对象数组,似乎我无法应用 .filer(),因此我尝试了一个简单的 for 循环(在这样的 Persos var 上的 *ngFor 中运行良好),但也没有成功。我认为我在这里遗漏了一些关于在 Typescript 中处理对象的非常基本的知识。

以下是带有一些测试和注释的管道代码:

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

import { Perso } from './perso';

@Pipe({ name: 'startsWithPersoPipe' })
export class StartsWithPersoPipe implements PipeTransform {
  transform(Persos: Perso[]){

    // this for makes it all bug, when I comment it my pipe works fine
    for( let perso of Persos){
    }

    // this for does not make it crash but does not behave at all like I want
    for( let perso in Persos){
      console.log(perso); // just prints 0, 1, 2, 3 etc up to 109 ( i have 110 elements in the Perso[] var I use for test)
      console.debug(perso); // same behavior as console.log(perso)
      console.log(perso.nom); // undefined
    }
    console.debug(Persos); // Array [ Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, 100 more… ]
                          // when I click on on of the Object I get one of my objects with correct values in nom, description and type : it's all fine !
    return Persos;
  }
}

以下是 perso.ts

export class Perso {
  nom: string;
  type: string;
  description: string;
}

任何帮助、提示或有用资源链接可以帮助我解决这个问题,我将不胜感激。

1个回答

这应该可以做到:

@Pipe({ name: 'startsWithPersoPipe' })
export class StartsWithPersoPipe implements PipeTransform {
  transform(Persos: Perso[]){
    if(Persos == null) {
      return null;
    }

    return persos.filter(p => p.nom && p.nom.startsWith('super'));
  }
}
Günter Zöchbauer
2016-08-16