Как отфильтровать массив в 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);
}

А массив всегда пуст. Пожалуйста, скажите мне, что я должен сделать

0
Serg Ilnytskiy 18 Мар 2017 в 17:47

2 ответа

Лучший ответ

Вы не подписаны на Наблюдаемую , используйте приведенный ниже код

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);
    })
}
1
Aravind 19 Мар 2017 в 01:20

Проверьте реальный тип JavaScript (не тип TypeScript) person.isVisited. Возможно, это не логическое значение, и сравнение с использованием === всегда возвращает false. Например, сгенерированный код JS пытается сравнить 0 === false. Вы также можете попробовать заменить === на ==.

Из MDN о === : Идентификационный оператор возвращает true, если операнды строго равны без преобразования типов.

0
Damian 19 Мар 2017 в 01:04