从角度中删除可观察数组中的多个元素

时间:2018-03-27 04:06:36

标签: angular rxjs

大家好,

我对angular和rxjs很陌生。我有两个可保存的阵列,其中一个是' A'只有其他可观察数组的子集' B'我需要删除A' A'来自' B'。我如何实现这一目标?

4 个答案:

答案 0 :(得分:0)

你可以通过编写将迭代数组的JS来做到这一点,但是如果你使用lodash的差异方法则很容易。在这里你可以找到它 https://lodash.com/docs/4.17.5#difference

答案 1 :(得分:0)

通常,在Angular2 +中,你应该取消订阅OnDestroy中的所有观察者,它可能看起来像这样:

ngOnDestroy() {
      this.subscribers.forEach(item => item.unsubscribe())
}

subscribers是一个数组,您应该用A或B替换它。

答案 2 :(得分:0)

您是否从阵列A和B中检索了所有元素,然后删除了订阅?在这种情况下,它们是简单的数组.. How can I subtract one array from another?将有助于.. 但是,如果订阅是实时的并且正在运行,那么您在子集的订阅处理程序中,您需要手动检查该项是否已存在于第二个数组中,然后从第二个数组中删除它。由于您已将其视为子集,因此仅需要删除操作。如果您想加入重复删除,则需要添加到第二个数组(如果不存在)。确保您具有标识值以将对象与另一个对象进行比较。

答案 3 :(得分:0)

import { map } from'rxjs/operators/map';
import { Observable } from 'rxjs/Observable'
import { of } from 'rxjs/observable/of';
import { forkJoin } from 'rxjs/observable/forkJoin';   

const arr1$ = of([1,2,3,4,5])
const arr2$ = of([1,2,3]);

const result$ = forkJoin(arr1$, arr2$).pipe(map(([arr1, arr2]) => arr1.filter(x => arr2.indexOf(x) === -1)));

result$.subscribe(console.log)