无法从打字稿中的对象列表中删除项目
Unable to remove item from list of objects in typescript
我正在使用以下代码从 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
我也试过将它移出 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
此行未按您的要求执行:
const index: number = this.allItineraries.indexOf(filters.id);
index
在这里总是 -1
,因为 allItineraries
是一个对象数组,而 filters.id
是(从控制台输出的外观来看)一个字符串.
您需要自己遍历 allItineraries
才能找到条目 e
,其中 e.id === filters.id
(您现有的比较是 e === filters.id
)。
与其自己迭代,不如使用 filter
and map
方法?
this.allItineraries = itineraryListSnapshot
.filter(snap => snap.id !== filters.id)
.map(snap => { id: snap.id, ...snap.data() });
我也用过object spread syntax which is supported in TypeScript >= 2.1.
我正在使用以下代码从 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
我也试过将它移出 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
此行未按您的要求执行:
const index: number = this.allItineraries.indexOf(filters.id);
index
在这里总是 -1
,因为 allItineraries
是一个对象数组,而 filters.id
是(从控制台输出的外观来看)一个字符串.
您需要自己遍历 allItineraries
才能找到条目 e
,其中 e.id === filters.id
(您现有的比较是 e === filters.id
)。
与其自己迭代,不如使用 filter
and map
方法?
this.allItineraries = itineraryListSnapshot
.filter(snap => snap.id !== filters.id)
.map(snap => { id: snap.id, ...snap.data() });
我也用过object spread syntax which is supported in TypeScript >= 2.1.