如何解决RxJS仅从数组获取更改的对象
是否有任何RxJS函数可以帮助我获取对象已更改的数组的子集?
类似distinctUntilChanged
的东西,但我会返回一个包含更改后的对象而不是所有对象的数组吗?
我的环境的一个示例是:
this.store.select(mySelector) -> observable for a list of objects
我想用管道传输几乎每100毫秒更新一次的可观察对象,以便仅返回更新的对象而不是完整列表。我一直在考虑最好的解决方案,因为在这种情况下性能会很重要,但是我什么也没想到,任何人都有建议吗?
编辑:我考虑过做一个distinctUntilChanged
并将prev和current数组分配给变量,然后在map
上使用这些变量,但这似乎不是最好的选择表现不错。
解决方案: 我通过将@MoxxiManagarm答案与此How can I get which object changed in a BehaviourSubject in RxJs?混合在一起,得到了一个解决方案,结果是:
myComparator = (prev: any,curr: any) => {
const returningValue = [];
curr.forEach((obj) => {
const prevObj = prev.find((v) => v.id === obj.id);
if (!prevObj) {
returningValue.push(obj);
} else {
if (JSON.stringify(prevObj) !== JSON.stringify(obj)) {
returningValue.push(obj);
}
}
});
return returningValue;
}
this.obs$ = this.store
.select(mySelector)
.pipe(
startWith([]),pairwise(),map(([prev,curr]) => this.myComparator(prev,curr))
);
解决方法
您可以使用成对和比较两个发射的函数。在我的示例中,我使用lodash的不带。
def get_formset(self,request,obj=None,**kwargs):
# this list will be generated dynamically
initial = [
{"content": "dynamic data 1"},{"content": "dynamic data 2"},{"content": "dynamic data 3"}
]
formset = super().get_formset(request,obj,**kwargs)
formset.__init__ = curry(formset.__init__,initial=initial) # from django.utils.functional import curry
return formset
输出:
const data = of(
['A'],['A','B'],['AA',);
data.pipe(
startWith([]),pairwise(),map(([l,r]) => without(r,...l)),).subscribe(console.log);
Stackblitz:https://stackblitz.com/edit/rxjs-wn9rxy?file=index.ts
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。