改变嵌套的可观察值
Alter nested observable values
return this.http.get(environment.remoteUrl + '/client').pipe(pluck('rows'), map((i: any) => i.doc));
我得到以下结构的数据:
{
rows: [
{x: 123, doc: {a: 2}},
{x:222, doc: {a: 1}}
],
c: 'hello',
b: 3
}
我只会return行下的两个文档给订阅者。
但是 map 函数似乎没有像我预期的那样工作,因为 undefined 是 returned.
我预计 [ {a: 2}, {a: 1} ]
我找到了解决方案:
.pipe(pluck('rows'), flatMap((i: any) => i), map((i: any) => i.doc), toArray());
但希望有更短的路!?
pluck('rows'),
这会将每个发出的事件转换成它的行 属性。所以它发出
[
{x: 123, doc: {a: 2}},
{x:222, doc: {a: 1}}
]
你现在想把这个数组转换成另一个数组,只包含
[ {a: 2}, {a: 1} ]
所以你需要一个map
运算符,这个map运算符必须将一个数组转换成另一个数组。这可以使用 Array.map()
:
来完成
map(arrayOfXAndDocs => arrayOfXAndDocs.map(xAndDoc => xAndDoc.doc))
为您的结构定义类型并使用它们而不是使用 any
,并使用易于理解的名称而不是 i
,有很大帮助。
注意 map 后面的 pluck 可以简化为一个操作:
map(objectWithRows => objectWithRows.rows.map(xAndDoc => xAndDoc.doc))
这避免了丑陋的 pluck()
运算符,它不是类型安全的。
return this.http.get(environment.remoteUrl + '/client').pipe(pluck('rows'), map((i: any) => i.doc));
我得到以下结构的数据:
{
rows: [
{x: 123, doc: {a: 2}},
{x:222, doc: {a: 1}}
],
c: 'hello',
b: 3
}
我只会return行下的两个文档给订阅者。
但是 map 函数似乎没有像我预期的那样工作,因为 undefined 是 returned.
我预计 [ {a: 2}, {a: 1} ]
我找到了解决方案:
.pipe(pluck('rows'), flatMap((i: any) => i), map((i: any) => i.doc), toArray());
但希望有更短的路!?
pluck('rows'),
这会将每个发出的事件转换成它的行 属性。所以它发出
[
{x: 123, doc: {a: 2}},
{x:222, doc: {a: 1}}
]
你现在想把这个数组转换成另一个数组,只包含
[ {a: 2}, {a: 1} ]
所以你需要一个map
运算符,这个map运算符必须将一个数组转换成另一个数组。这可以使用 Array.map()
:
map(arrayOfXAndDocs => arrayOfXAndDocs.map(xAndDoc => xAndDoc.doc))
为您的结构定义类型并使用它们而不是使用 any
,并使用易于理解的名称而不是 i
,有很大帮助。
注意 map 后面的 pluck 可以简化为一个操作:
map(objectWithRows => objectWithRows.rows.map(xAndDoc => xAndDoc.doc))
这避免了丑陋的 pluck()
运算符,它不是类型安全的。