Я получил массив наблюдаемых объектов, которые я должен отфильтровать для конкретных идентификаторов, которые я храню в массиве строк.
Поэтому я должен проверить, имеет ли каждый отдельный объект в моем наблюдаемом массиве идентификатор, совпадающий с идентификатором моего строкового массива.
Я пробовал это:
filter(docs => {
docs.forEach(doc => {
this.StringArray().forEach(string => {
doc.id === string;
});
});
return docs;
})
Но я получаю ошибку компиляции:
...is not assignable to type 'boolean'
и понятия не имею, как решить эту проблему.
Я новичок в Typescript, и если есть лучшее решение этой проблемы, я открыт для любых предложений.
Также, если нужно больше кода, я бы обновил его.
ОБНОВЛЕНИЕ для этана:
getSearchResult(searchRequest: Searchrequest) {
return this.authService.user$.pipe(
switchMap(user => {
return this.angularFirestore
.collection<any>('users', ref => ref.where('offers', 'array-contains', searchRequest.offerParam)
.where('city', '==', searchRequest.cityParam)
.where('sex', '==', searchRequest.sexParam))
.snapshotChanges()
.pipe(
map(actions => {
return actions.map(a => {
const data = a.payload.doc.data() as User;
const id = a.payload.doc.id;
return { id, ...data };
});
}),
filter(docs => {
docs.filter(doc => this.getUsersToBeExcludedArray().includes(doc.uid));
})
);
}
)
);
}
2. Обновление
getSearchResult(searchRequest: Searchrequest) {
console.log(this.getUsersToBeExcludedArray());
return this.authService.user$.pipe(
switchMap(user => {
return this.angularFirestore
.collection<any>('users', ref => ref.where('offers', 'array-contains', searchRequest.offerParam)
.where('city', '==', searchRequest.cityParam)
.where('sex', '==', searchRequest.sexParam))
.snapshotChanges()
.pipe(
map(actions => {
return actions.map(a => {
const data = a.payload.doc.data() as User;
const id = a.payload.doc.id;
return { id, ...data };
});
}),
// docs is an array
filter(docs => {
return this.getUsersToBeExcludedArray().includes(docs.id); // can't access docs.id
})
);
}
)
);
}