次のコードを使用して、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);
});
});
}
}
また、forループの外に移動しようとしましたが、index = -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
この行はあなたが望むことをしていません:
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でサポートされているオブジェクトスプレッド構文も使用しました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加