Rxjs Observable 数组 select 在给定的起始值和结束值之间
Rxjs Observable array select between given start and end values
我有一个如下所示的 Observable 数组:
persons$: Observable<Person[]> = new Observable<Person[]>();
private personSource: BehaviorSubject<Person[]>;
constructor() {
this.personSource = new BehaviorSubject<Person[]>([
new Person('Meenique'),
new Person('Wolfcastle'),
new Person('Stradivarius Cain'),
new Person('Wiggum'),
new Person('McKenna'),
new Person('Flanders'),
new Person('Kent Brockman'),
new Person('Manjula')
]);
现在,我想 select 给定 属性 之间的值。例如:'Name'
async selectBetween(start: string, end: string): Promise<Person[]> {
// return this.persons$.pipe(map(p => p.Name)).toPromise();
}
selectBetween
函数将采用两个字符串值。在这种情况下,Person.Name
并且应该 return 给定名称之间的所有值。
例如:
const test1 = await this.selectBetween('Wolfcastle', 'McKenna');
应该return:[Wolfcastle, Stradivarius Cain, Wiggum, McKenna]
这是我的 StackBlitz 示例:
不确定你为什么要在这里涉及 Promise,但如果你真的想这样做,你可能会找到一种比我更好的转换方法,因为我从不混淆两者。
无论如何,这个 returns 一个可观察对象,其中包含两个名字之间的一组人:
selectBetween(start: string, end: string): Observable<Person[]> {
return this.persons$.pipe(
map(pArray => {
const startIndex = pArray.findIndex(p => p.name === start);
const endIndex = pArray.findIndex(p => p.name === end);
return pArray.filter((p, i) => i >= startIndex && i <= endIndex);
})
);
}
堆栈闪电战:
编辑:这个 returns 整个 Person 对象,如果您只想要名称值,只需编辑最后一行:
return pArray.filter((p, i) => i >= startIndex && i <= endIndex).map(p => p.name);
我有一个如下所示的 Observable 数组:
persons$: Observable<Person[]> = new Observable<Person[]>();
private personSource: BehaviorSubject<Person[]>;
constructor() {
this.personSource = new BehaviorSubject<Person[]>([
new Person('Meenique'),
new Person('Wolfcastle'),
new Person('Stradivarius Cain'),
new Person('Wiggum'),
new Person('McKenna'),
new Person('Flanders'),
new Person('Kent Brockman'),
new Person('Manjula')
]);
现在,我想 select 给定 属性 之间的值。例如:'Name'
async selectBetween(start: string, end: string): Promise<Person[]> {
// return this.persons$.pipe(map(p => p.Name)).toPromise();
}
selectBetween
函数将采用两个字符串值。在这种情况下,Person.Name
并且应该 return 给定名称之间的所有值。
例如:
const test1 = await this.selectBetween('Wolfcastle', 'McKenna');
应该return:[Wolfcastle, Stradivarius Cain, Wiggum, McKenna]
这是我的 StackBlitz 示例:
不确定你为什么要在这里涉及 Promise,但如果你真的想这样做,你可能会找到一种比我更好的转换方法,因为我从不混淆两者。
无论如何,这个 returns 一个可观察对象,其中包含两个名字之间的一组人:
selectBetween(start: string, end: string): Observable<Person[]> {
return this.persons$.pipe(
map(pArray => {
const startIndex = pArray.findIndex(p => p.name === start);
const endIndex = pArray.findIndex(p => p.name === end);
return pArray.filter((p, i) => i >= startIndex && i <= endIndex);
})
);
}
堆栈闪电战:
编辑:这个 returns 整个 Person 对象,如果您只想要名称值,只需编辑最后一行:
return pArray.filter((p, i) => i >= startIndex && i <= endIndex).map(p => p.name);