【问题标题】:how to filter array in typescript如何在打字稿中过滤数组
【发布时间】:2017-08-10 02:10:18
【问题描述】:

如何在 TypeScript 中过滤数组。我试过这个

    findAllPersonsNotVisited():Observable<Person[]> {

    var rightNow = new Date();
    var res = rightNow.toISOString().slice(0,10).replace(/-/g,"-");




    return this.db.list('person/' + res)
        **.filter(
          person => person.isVisitor === false
        )**
        .do(console.log)
        .map(Person.fromJsonList);

}

然后这个

    ngOnInit() {
  this.allPersonsIsVisited = this.allPersons.filter(
          person => person.isVisited === false);
}

并且数组始终为空。请告诉我我必须做什么

【问题讨论】:

  • 看起来或多或少还可以。你确定 allPersons 数组中有东西吗?
  • 是的,因为如果我不使用过滤器,我会看到所有人。但是使用过滤器我什么也看不到

标签: arrays typescript filter


【解决方案1】:

您没有订阅 Observable,请使用以下代码

this.serviceName.
    findAllPersonsNotVisited
        .subscribe((data) => {this.allPersons = data},
                             (error)=> console.log(error),
                            (completion) => this.filterData());

在lodash的帮助下使用私有方法提取所需的结果

private filterData() {
    this.allPersons.forEach((person)=>{
        let p1=_.find(person,{isVisted : false});
        if(!_.isEmpty(p1)) this.allPersonsIsVisited.push(p1);
    })
}

【讨论】:

    【解决方案2】:

    验证 person.isVisited 的真实 JavaScript 类型(不是 TypeScript 类型)。可能它不是布尔值,使用=== 的比较总是返回false。例如生成的 JS 代码试图比较0 === false。您也可以尝试将=== 替换为==

    来自MDN 关于===:如果操作数严格相等且没有类型转换,则恒等运算符返回true。

    【讨论】:

      猜你喜欢
      • 2020-03-22
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 2017-09-10
      • 2019-11-26
      • 2019-06-02
      相关资源
      最近更新 更多