我有一个可以观察到的笔记
this.notes$ = this.NoteService.notes$
notes$ =
0: {id: 4, user_id: 1, body: null, reminder: null, created_at: '2022-08-22T17:44:37.000000Z', …}
1: {id: 3, user_id: 1, body: 'die neuere', reminder: null, created_at: '2022-05-22T10:04:26.000000Z', …}
2: {id: 2, user_id: 1, body: 'Klappt das mit den Notizen?\n\n\nAuch mit Absätzen?', reminder: '2022-05-22 00:00:00', created_at: '2022-05-15T19:34:36.000000Z', …}
3:
body: "Meine Lieblingsnotiz"
created_at: "2022-05-15T18:13:43.000000Z"
id: 1
reminder: null
tags: Array(2)
0: {id: 1, name: 'Arbeit', slug: 'arbeit', created_at: null, updated_at: null, …}
1: {id: 4, name: 'Backlog', slug: 'backlog', created_at: null, updated_at: null, …}
length: 2
[[Prototype]]: Array(0)
title: "Test Notiz"
updated_at: "2022-05-15T18:13:57.000000Z"
user_id: 1现在,我在html页面中有了开关,在那里我喜欢为标记激活一个过滤器。我把过滤器推到一个额外的数组,
['backlog', 'arbeit', 'email']但是我没有办法通过阵列滤波器进行可观察到的滤波。我在想一件事
this.notes$ = this.NoteService.notes$.pipe(
map(notes=> notes
//.filter(t=> (!t.tags || t.tags.some(ai => this.filterTag.includes(ai))))
//.filter(t=> t.tags?.length > 0 && t.tags?.includes(this.filterTag)
//.filter(t=> t.tags!=undefined && t.tags.includes(this.filterTag))
))也许你有个主意给我?提前感谢
发布于 2022-08-23 08:26:44
我用另一种方式修复了它
this.notes$ = this.NoteService.notes$.pipe(
map((notes => notes
.filter(t=> this.filterTaginNote(t)
))))
;filterTaginNote(note: Note){
if (this.filterTag.length == 0){return true}
if (note.tags){
for(var i = 0; i < note.tags?.length; i++){
if (this.filterTag.includes(note.tags[i].slug)){
return true;
}
}
}
return false;
}发布于 2022-08-23 03:20:59
检查是否为一个数组,然后执行常规逻辑,否则只需使用数组的includes方法在数组中找到该字符串。如果不存在标记,则返回原始数组本身!
this.notes$ = this.NoteService.notes$.pipe(
map(notes=> notes.filter(t=>
t.tags && t.tags.length ?
(
Array.isArray(this.filterTag) ?
t.tags.some(x => this.filterTag.includes(x)) :
t.tags.includes(this.filterTag)
): true
))https://stackoverflow.com/questions/73451238
复制相似问题