【问题标题】:Filtering data from JSONArray and assigning it to a new object从 JSONArray 过滤数据并将其分配给新对象
【发布时间】:2021-05-07 15:26:20
【问题描述】:

考虑以下示例:

const arr1 = [{'a': 'I', 'b': 'M', 'c': 'Q'}]; const arr2 = [{'x': 'C', 'y': 'D', 'z': 'M'}];

// 我从服务调用中获取这些数组

如果(arr2 的键 'z' 的值与 arr1 的键 'b' 的值匹配){

// 将键值 x 和 y 分配给 arr1 对象

}

是否可以使用任何 RxJs 运算符?我实现了 forkJoin 并且能够从服务到组件级别获取两个数组。但是我也尝试了 mergeMap 和 flatMap ,但没有成功。似乎,我必须运行一个我试图避免的嵌套循环。

【问题讨论】:

  • 我不是 100% 确定我完全理解你想要做什么,是 arr1.b===arr2.z 唯一的规则(它是所有其他键还是只是 x 和 y),还有更多,或类似的规则?
  • 看,键z和键b的值持有_id。这就是为什么我想匹配他们。是的,这是唯一的规则。但如果您有任何其他方法,请分享。
  • 请分享您尝试过的代码。
  • 对不起 BizzyBob 我的 mergeMap,flatMap 代码,因为我不成功。我无法领先于以下 forkJoin: ================================== getMyFriends(): Observable { 常量用户 = this.us.getUsers();常量朋友 = this.getFriends(); return forkJoin([用户,朋友]); }

标签: angular rxjs flatmap mergemap


【解决方案1】:

嗯,你的问题没有任何上下文,所以这里有一个类似于你所要求的答案:

forkJoin(
  of([{a: 'I', b: 'M', c: 'Q'}]),
  of([{x: 'C', y: 'D', z: 'M'}])
).pipe(
  map(([[ob1],[ob2]]) => 
    ob1.a == ob2.z? 
    [[{...ob1, x: ob2.x, y:ob2.y}],[ob2]]:
    ([[ob1],[ob2]])
  )
).subscribe(console.log);

如果您用更多细节/上下文重新编写您的问题,您可能会得到更好的答案:)

【讨论】:

  • 嘿,谢谢。让我试试看。是的,我正在寻找这样的东西。
猜你喜欢
  • 2021-07-10
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 2021-04-26
  • 2014-12-03
  • 1970-01-01
相关资源
最近更新 更多