【问题标题】:remove multiple elements from an observable array in angular从角度的可观察数组中删除多个元素
【发布时间】:2018-03-27 04:06:35
【问题描述】:

大家好,

我对 Angular 和 rxjs 还是很陌生。我有两个可观察数组,其中一个“A”只有另一个可观察数组“B”的子集。我需要从“B”中删除“A”中的元素。我该如何做到这一点?

【问题讨论】:

  • 在这里你可以找到一些关于 stackoverflow stackoverflow.com/help/on-topic 应该问什么的信息。您的问题不包含有关您尝试过的内容以及遇到问题的任何详细信息。

标签: angular rxjs


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • @Deshani Gunawardana 你需要这方面的任何具体帮助吗?
    【解决方案3】:
    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)
    

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-26
        • 1970-01-01
        • 2021-10-19
        • 1970-01-01
        • 2016-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多