为了账号安全,请及时绑定邮箱和手机立即绑定

MergeMap 到 Map RxJS 打字稿

MergeMap 到 Map RxJS 打字稿

慕的地10843 2023-04-01 15:40:05
我目前正在学习 RxJS,但不明白。我有这段代码:mapOfPeople = new Map<number, any>();const people = [  { name: 'Sue', age: 25 },  { name: 'Joe', age: 30 },  { name: 'Frank', age: 25 },  { name: 'Sarah', age: 35 }];from(people)  .pipe(    groupBy(      person => person.age,      p => p    ),    mergeMap(group => zip(of(group.key), group.pipe(toArray())))  )  .subscribe(console.log);此代码来自教程。我想将输出放入给定的哈希图中。我该如何管理?我不知道。
查看完整描述

3 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

在这个相当人为的示例中,您只想在末尾添加一个 reduce 运算符:


from(people)

  .pipe(

    groupBy(

      person => person.age,

      p => p

    ),

    mergeMap(group => zip(of(group.key), group.pipe(toArray()))),

    reduce((acc, v) => {

      acc.set(v[0], v[1])

      return acc

    }, new Map<number, any>())

  )

  .subscribe(m => mapOfPeople = m);


查看完整回答
反对 回复 2023-04-01
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

我无法编译您的初始代码,而且我不确定 zip 部分在这种情况下的用途。


一种方法是使用订阅函数处理程序。目前它是 console.log - 但你可以在这里做任何格式的事情(arg) => void(一个从 observable 中获取一个项目并以某种方式处理它的函数。


这是一个将每个年龄段的人的数组添加到地图中的示例:


type Person = { name: string, age: number};


const mapOfPeople = new Map<number, Person[]>();


const people = [

  { name: 'Sue', age: 25 },

  { name: 'Joe', age: 30 },

  { name: 'Frank', age: 25 },

  { name: 'Sarah', age: 35 }

];


from(people).pipe(

  groupBy(person => person.age),

  mergeMap(group => group.pipe(toArray()))

).subscribe(people => {

  // the age of any in this group of people is the key

  const { age } = people[0];


  // set as map's value for this age

  mapOfPeople.set(age, people);

});


查看完整回答
反对 回复 2023-04-01
?
杨魅力

TA贡献1811条经验 获得超6个赞

mapOfPeople: any;


const people = [

  { name: 'Sue', age: 25 },

  { name: 'Joe', age: 30 },

  { name: 'Frank', age: 25 },

  { name: 'Sarah', age: 35 }

];


from(people)

  .pipe(

    groupBy(

      person => person.age,

      p => p

    ),

    mergeMap(group => zip(of(group.key), group.pipe(toArray())))

  )

  .subscribe(res => mapOfPeople = res /*or do whatever you want with the result*/)

查看完整回答
反对 回复 2023-04-01
  • 3 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信