Ecmascript 6 重构胖箭头嵌套的rxjs流
我在玩。为了更好地学习rxjs 我正在处理的数组如下所示。我只是想从数组中取出id 我能够在工作中得到答案,但我觉得答案可以写得更好Ecmascript 6 重构胖箭头嵌套的rxjs流,ecmascript-6,rxjs,reactive-programming,Ecmascript 6,Rxjs,Reactive Programming,我在玩。为了更好地学习rxjs 我正在处理的数组如下所示。我只是想从数组中取出id 我能够在工作中得到答案,但我觉得答案可以写得更好 var movieLists = [ { name: "New Releases", videos: [ { "id": 70111470, "title": "Die Hard",
var movieLists = [
{
name: "New Releases",
videos: [
{
"id": 70111470,
"title": "Die Hard",
"boxart": "http://cdn-0.nflximg.com/images/2891/DieHard.jpg",
"uri": "http://api.netflix.com/catalog/titles/movies/70111470",
"rating": 4.0,
"bookmark": []
},
{
"id": 654356453,
"title": "Bad Boys",
"boxart": "http://cdn-0.nflximg.com/images/2891/BadBoys.jpg",
"uri": "http://api.netflix.com/catalog/titles/movies/70111470",
"rating": 5.0,
"bookmark": [{ id: 432534, time: 65876586 }]
}
]
},
{
name: "Dramas",
videos: [
{
"id": 65432445,
"title": "The Chamber",
"boxart": "http://cdn-0.nflximg.com/images/2891/TheChamber.jpg",
"uri": "http://api.netflix.com/catalog/titles/movies/70111470",
"rating": 4.0,
"bookmark": []
},
{
"id": 675465,
"title": "Fracture",
"boxart": "http://cdn-0.nflximg.com/images/2891/Fracture.jpg",
"uri": "http://api.netflix.com/catalog/titles/movies/70111470",
"rating": 5.0,
"bookmark": [{ id: 432534, time: 65876586 }]
}
]
}
];
这是我想出的答案
movieLists
.map( movieList => movieList.videos
.map(video => video.id) ) // don't like this part
.concatAll()
我基本上是把一张地图嵌套在另一张地图中,然后调用concat
是否有可能重构第二个映射胖箭头,使其位于第一个映射胖箭头之外
.map()
.map()
映射到电影后,可以使用
concatAll()
:
var movieLists=[
{
名称:“新版本”,
视频:[
{
“id”:70111470,
“头衔”:“死硬”,
“boxart”:http://cdn-0.nflximg.com/images/2891/DieHard.jpg",
“uri”:http://api.netflix.com/catalog/titles/movies/70111470",
“评级”:4.0,
“书签”:[]
},
{
“id”:654356453,
“头衔”:“坏男孩”,
“boxart”:http://cdn-0.nflximg.com/images/2891/BadBoys.jpg",
“uri”:http://api.netflix.com/catalog/titles/movies/70111470",
“评级”:5.0,
“书签”:[{id:432534,时间:65876586}]
}
]
},
{
名称:“戏剧”,
视频:[
{
“id”:65432445,
“头衔”:“商会”,
“boxart”:http://cdn-0.nflximg.com/images/2891/TheChamber.jpg",
“uri”:http://api.netflix.com/catalog/titles/movies/70111470",
“评级”:4.0,
“书签”:[]
},
{
“id”:675465,
“标题”:“骨折”,
“boxart”:http://cdn-0.nflximg.com/images/2891/Fracture.jpg",
“uri”:http://api.netflix.com/catalog/titles/movies/70111470",
“评级”:5.0,
“书签”:[{id:432534,时间:65876586}]
}
]
}
];
可观察到的接收(电影演员)
.map(movieList=>movieList.videos)
.concatAll()
.map(video=>video.id)
.do(console.log)
.subscribe()代码>
您可以在映射到电影后使用concatAll()
:
var movieLists=[
{
名称:“新版本”,
视频:[
{
“id”:70111470,
“头衔”:“死硬”,
“boxart”:http://cdn-0.nflximg.com/images/2891/DieHard.jpg",
“uri”:http://api.netflix.com/catalog/titles/movies/70111470",
“评级”:4.0,
“书签”:[]
},
{
“id”:654356453,
“头衔”:“坏男孩”,
“boxart”:http://cdn-0.nflximg.com/images/2891/BadBoys.jpg",
“uri”:http://api.netflix.com/catalog/titles/movies/70111470",
“评级”:5.0,
“书签”:[{id:432534,时间:65876586}]
}
]
},
{
名称:“戏剧”,
视频:[
{
“id”:65432445,
“头衔”:“商会”,
“boxart”:http://cdn-0.nflximg.com/images/2891/TheChamber.jpg",
“uri”:http://api.netflix.com/catalog/titles/movies/70111470",
“评级”:4.0,
“书签”:[]
},
{
“id”:675465,
“标题”:“骨折”,
“boxart”:http://cdn-0.nflximg.com/images/2891/Fracture.jpg",
“uri”:http://api.netflix.com/catalog/titles/movies/70111470",
“评级”:5.0,
“书签”:[{id:432534,时间:65876586}]
}
]
}
];
可观察到的接收(电影演员)
.map(movieList=>movieList.videos)
.concatAll()
.map(video=>video.id)
.do(console.log)
.subscribe()代码>
只需更改运算符的顺序即可
Observable.from(movieLists)
.map(movie => movie.videos)
.concatAll()
.map(movie => movie.id);
只需更改运算符的顺序即可
Observable.from(movieLists)
.map(movie => movie.videos)
.concatAll()
.map(movie => movie.id);
您可以在单个操作员中执行此操作:
Observable.from(movieLists)
.concatMap(
movie => movie.videos,
(_, video) => video.id
)
您可以在单个操作员中执行此操作:
Observable.from(movieLists)
.concatMap(
movie => movie.videos,
(_, video) => video.id
)
我甚至没想过。我还发现使用flatmap很有效,但这更好,谢谢。我甚至没有想到这一点。我还发现使用flatmap很有效,但这更好,谢谢。我找到了使用flatmap控制台.log(movieLists.map(movieList=>movieList.videos.flatmap(videos=>videos.map)(post=>post.id))的方法。我同意rxjs没有任何用处,但我的目标是适应它。好的,很好-也许你想发布你的解决方案并接受它作为答案,因为其他人看到不同的解决方案可能会感兴趣。我找到了如何使用平面地图控制台.log(movieLists.map(movieList=>movieList.videos).flatMap(videos=>videos.map(post=>post.id))实现这一点的方法.我同意rxjs没有任何用处,但我的目标是适应它。好的,很好-也许你想发布你的解决方案并接受它作为答案,因为其他人看到不同的解决方案可能会很有趣