MergeMap 到 Map RxJS 打字稿
MergeMap into Map RxJS Typescript
我目前正在学习 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);
此代码来自教程。
我想将输出放入给定的哈希图中。我该如何管理?我不知道。
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*/);
更多信息:observable
我无法编译您的初始代码,而且我不确定 zip 部分在此上下文中的用途。
一种方法是使用订阅函数处理程序。目前它是 console.log - 但你可以在这里做任何格式 (arg) => void
的事情(一个从可观察对象中获取一个项目并以某种方式处理它的函数。
下面是一个将每个年龄段的人数组添加到地图中的示例:
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);
});
您想在这个相当人为的示例的末尾添加一个 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);
我目前正在学习 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);
此代码来自教程。
我想将输出放入给定的哈希图中。我该如何管理?我不知道。
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*/);
更多信息:observable
我无法编译您的初始代码,而且我不确定 zip 部分在此上下文中的用途。
一种方法是使用订阅函数处理程序。目前它是 console.log - 但你可以在这里做任何格式 (arg) => void
的事情(一个从可观察对象中获取一个项目并以某种方式处理它的函数。
下面是一个将每个年龄段的人数组添加到地图中的示例:
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);
});
您想在这个相当人为的示例的末尾添加一个 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);