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…”