У меня есть список элементов в массиве. Каждый элемент в массиве содержит следующее:

id
date
status
name
description

Я пытаюсь создать второй массив, который будет содержать все элементы из первого массива, где status = 'pending'.

Я выполняю в своем файле home.ts следующий код:

showPending(){
    this.pendingItems = this.items;
    this.pendingItems.filter((item) => {return item.status === 'pending'});
    this.navCtrl.push(ShowPendingPage, {
    pendingItems: this.pendingItems      
    });
  }

Когда я запускаю свое приложение, я добавляю 3 элемента в массив items. 2 элемента находятся в состоянии ожидания, а 1 - в состоянии завершения. Когда я выполняю приведенный выше код, отправляется ShowPendingPage. Я выполняю этот код в файле ShowPendingPage.ts:

this.passedArray = this.navParams.get('pendingItems')

И я выполняю в моем ShowPendingPage.html следующее:

  <ion-content>
  <ion-list>
      <ion-item-sliding *ngFor="let item of passedArray">
        <ion-item [ngClass]="item.status">
            {{item.name}} - Added {{item.date}}
        </ion-item>  
        <ion-item-options side="right">
          <button ion-button color="light" (click)="viewItem(item)">View</button>
        </ion-item-options>
      </ion-item-sliding>
    </ion-list>
  </ion-content>

Результирующий массив содержит все 3 элемента исходного массива. Он должен содержать только 2 элемента, два из которых я установил в состояние ожидания.

Кто-нибудь с лучшими глазами, чем я, может видеть то, что мне не хватает?

0
Jonathan Small 25 Май 2018 в 03:10

1 ответ

Лучший ответ

Array.prototype.filter создает новый массив с отфильтрованными элементами, который не на месте .

Метод filter () создает новый массив со всеми элементами, которые проходят проверку, реализованную предоставленной функцией.

Также

filter () не изменяет массив, для которого он вызывается.

Вам просто нужно установить его в свою переменную.

this.pendingItems = this.pendingItems.filter((item) => {return item.status === 'pending'});
3
Suraj Rao 25 Май 2018 в 07:10