angular - 如何基于两个现有的 Observable 数组创建一个新的 Observable 数组,
问题描述
我有两个从不同 API 端点填充的 Observable 数组。我想要做的是根据 ID 比较它们,所以只取相等的地方,然后从数组中的每个对象中挑选属性以生成一个新的 Observable 数组。有任何想法吗?
解决方案
这应该这样做:
forkJoin(
obs1$,
obs2$,
).pipe(
map((obs1, obs2) =>
obs1
.filter(v1 => obs2.some(v2 => v1.id === v2.id))
.map((v, i, a) => ({ ...v, ...(obs2[i] || {})}))
),
);
- 结合两个可观察的
- 管道到地图
- 在第二个数组的相同 ID 上过滤第一个数组
- 映射第一个数组的项以由第二个数组的项扩展(如果已定义)
- 返回从管道创建的值。
概念证明:
const d1 = [
{ id: 1, value: 'v1.1' },
{ id: 2, value: 'v1.2' },
{ id: 3, value: 'v1.3' },
{ id: 4, value: 'v1.4' },
];
const d2 = [
{ id: 1, value: 'v1.1 overriden' },
{ id: 2, value2: 'v1.2 extended' },
];
console.log(d1
.filter(v1 => d2.some(v2 => v1.id === v2.id))
.map((v, i, a) => ({ ...v, ...(d2[i] || {})}))
);
推荐阅读
- android - 检查值是否已经在firebase数据库中(Android)
- javascript - 防止引导模式在页面加载时自动显示
- unity3d - 尽管有所有必要的组件,但 Unity UI 按钮根本不起作用
- c# - 将数据从数据库检索到 DataGridView C#
- python - 预测后的人脸重组尝试面对预测值的索引,然后得到索引 3 超出轴 0 的范围,大小为 2
- python - Python CPLEX 暖从不可行的解决方案开始
- python - 在python子进程中构建反应项目时JavaScript堆内存不足
- scala - 覆盖类型边界时出现不兼容的类型错误
- c++ - using-declaration 不能命名命名空间
- css - 如何在窗口大小减小到最小时避免图标溢出