Невозможно удалить элемент из списка объектов в машинописи - PullRequest
1 голос
/ 22 июня 2019

Я использую следующий код, чтобы получить список объектов из firebase. Мне нужно удалить элемент из списка, но я продолжаю получать -1 для индекса. Что я тут не так делаю?

filterItineraries(filters: any): any {
  let num = 0;
  this.allItineraries = [];
  this.filteredItineraries = [];

  for (let i = 0; i < 2; i++) {
    if (i === 0) {
      num = 0;
    } else {
      num = (filters.numberOfDays - 1);
    }

    const query = this.dataSvc.getAllItineraries()
        .where('destination', '==', filters.destination)
        .where('dateRange', 'array-contains', filters.dateRange[num]);

    query.get()
        .then(itineraryListSnapshot => {
          this.allItineraries = [];

          itineraryListSnapshot.forEach(snap => {
            this.allItineraries.push({
              id: snap.id,
              jobCode: snap.data().jobCode,
              destination: snap.data().destination,
              startDate: snap.data().startDate,
              endDate: snap.data().endDate,
              workDetails: snap.data().workDetails,
              userId: snap.data().userId
            });

            const index: number = this.allItineraries.indexOf(filters.id);

            if (index !== -1) {
              this.allItineraries.splice(index, 1);
            }

            console.log('index', index);
            console.log('filters.id', filters.id);
            console.log('filteredItineraries',  this.allItineraries);
          });
        });
  }
}

console.log console.log

Я также пытался переместить его за пределы цикла for, но индекс = -1.

И, наконец, я попробовал:

this.filteredItineraries = this.allItineraries;
const index: number = this.filteredItineraries.indexOf(filters.id);

if (index !== -1) {
  this.filteredItineraries.splice(index, 1);
}

console.log('index', index);
console.log('filters.id', filters.id);
console.log('filteredItineraries',  this.filteredItineraries);

индекс всегда = -1

1 Ответ

2 голосов
/ 22 июня 2019

Эта строка не делает то, что вы хотите:

const index: number = this.allItineraries.indexOf(filters.id);

index всегда будет -1 здесь, потому что allItineraries - это массив объектов, а filters.id (извнешний вид вашей консоли выводит) строку.

Вам нужно было бы пройти через allItineraries самостоятельно, чтобы найти запись e где e.id === filters.id (ваше существующее сравнение e === filters.id).


Вместо того, чтобы повторяться, почему бы не использовать filter и map подход?

this.allItineraries = itineraryListSnapshot
        .filter(snap => snap.id !== filters.id)
        .map(snap => { id: snap.id, ...snap.data() });

Я такжеиспользовал синтаксис объекта распространения , который поддерживается в TypeScript> = 2.1 .

...