首页 > 解决方案 > RxJS 在属性中的对象数组上不同

问题描述

我有一个 observable,它返回如下内容:

"@odata.context": "here is the context URL",
"value": [
        {
            "Id": 1,
            "Value": "A"
        },
        {
            "Id": 2,
            "Value": "B"
        },
        {
            "Id": 3,
            "Value": "C"
        },
        {
            "Id": 4,
            "Value": "A"
        }
    ]
}

使用 RxJS 我想进入“值”属性并在其上使用 distinct 来限制对这样的响应:

"@odata.context": "here is the context URL",
"value": [
        {
            "Id": 1,
            "Value": "A"
        },
        {
            "Id": 2,
            "Value": "B"
        },
        {
            "Id": 3,
            "Value": "C"
        }
    ]
}

你能帮我吗?

标签: rxjs

解决方案


这在很大程度上取决于你想如何使用这个 RxJS 链,但我希望这会引导你正确的方向:

const source = of(data)
  .pipe(
    mergeMap(d => d.value),
    distinct(v => v.Value),
    toArray(),
  )
  .subscribe(console.log);

mergeMap将重复值数组作为单独的排放,其中distinct将忽略重复Value的 s。然后toArray()将收集所有结果。

现场演示:https ://stackblitz.com/edit/rxjs-is1zp4


推荐阅读