gpt4 book ai didi

javascript - 如何从 Observable> 中删除特定元素

转载 作者:可可西里 更新时间:2023-11-01 02:01:04 25 4
gpt4 key购买 nike

有一个位置数组的Observable:

places: Observable<Array<any>>;

在模板中它与异步管道一起使用:

<tr *ngFor="let place of places | async">
...
</tr>

在一些用户操作之后,我需要从这个数组中删除具有特定 id 的地方。我的代码中有类似这样的内容,但它不起作用:

deletePlace(placeId: number): void {
this.apiService.deletePlace(placeId)
.subscribe(
(res: any) => {
this.places
.flatMap((places) => places)
.filter((place) => place.id != placeId);
},
(err: any) => console.log(err)
);
}

你能帮我解决这个问题吗?

最佳答案

你不能这样做,因为你不能“更新”一个可观察对象(即它不保持状态),但你可以通过它对事件使用react。

对于您的用例,我将利用 scan 运算符并将两个流合并为一个流:

  • 一个用于初始加载
  • 另一个用于删除事件。

这是一个示例:

let obs = this.http.get('/data').map(res => res.json());

this.deleteSubject = new Subject();

this.mergedObs = obs.merge(this.deleteSubject)
.startWith([])
.scan((acc, val) => {
if (val.op && val.op==='delete') {
var index = acc.findIndex((elt) => elt.id === val.id);
acc.splice(index, 1);
return acc;
} else {
return acc.concat(val);
}
});

要触发元素删除,只需发送一个关于主题的事件:

this.deleteSubject.next({op:'delete', id: '1'});

查看此插件:https://plnkr.co/edit/8bYoyDiwM8pM74BYe8SI?p=preview .

关于javascript - 如何从 Observable<Array<any>> 中删除特定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38181954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com