Javascript 使用rxjs,如何将每个元素映射到多个元素
我想这并不难,但我不知道怎么做。我有一个对象数组,每个对象都包含一个数组。在完成一些额外的处理之后,我想为每个元素检索一个远程资源。我的问题是,我的函数返回一个数组,但我希望数组的元素分开Javascript 使用rxjs,如何将每个元素映射到多个元素,javascript,rxjs,reactive-programming,Javascript,Rxjs,Reactive Programming,我想这并不难,但我不知道怎么做。我有一个对象数组,每个对象都包含一个数组。在完成一些额外的处理之后,我想为每个元素检索一个远程资源。我的问题是,我的函数返回一个数组,但我希望数组的元素分开 return Rx.Observable.from([ // 1 { "rosters": ["a/name1", "b/name2"] }, { "rosters": ["c/name3", "c/name4"] }]) .m
return Rx.Observable.from([ // 1
{ "rosters": ["a/name1", "b/name2"] },
{ "rosters": ["c/name3", "c/name4"] }])
.map(group => group.rosters) // 2
.map(roster => roster.substring(0, roster.indexOf('/'))) // 3
.distinct() // have I seen this before?
.map(folder => http.get(URL + folder + '/ads.json').map(res => res.json())
.map(adData => adData.ads)
.reduce(/* choose random ad */);
我希望#2处的函数返回数据,这样#3的每个输入都是一个单独的字符串。现在进入#3的是数组(在我的示例中是字符串对)。谢谢 在OP和@tmslnz的协助下
将
.map(group=>group.floster)
更改为.flatMap(group=>group.floster)
首先,您的对象周围是否需要方括号?i、 e.在你的第一行中,你目前有来自({“名册”:…},{…})的。应该是([{“名册”:…},{…}])
?注意方括号的插入。当我没有它们时,我会出错。你是对的,这是我问题中的一个输入错误,但不是代码中的错误。谢谢,改为您建议的内容我对Rx不太熟悉,但我想知道flatMap
是否可以用于(2)现在#2的函数返回两个数组,每个数组包含两个项目。相反,您希望返回四个项目(即“a…”、“b…”、“c…”、“c…”)还是只返回两个项目,例如每个数组的第一个项目(即“a…”、“c…”)?@Andrewillems我希望返回前一个“a…”、“b…”、“c…”、“c…”和“c…”