使用.map与.filter基于movieId合并Movies与Comments数组的正确方法
电影与评论数组合并实现问题
业务背景
两次数据库查询分别获取Movies、Comments两个数组,需要基于movieId字段完成关联合并后返回客户端。
输入输出结构定义
- 源数据:
Movies数组结构
[ { "movieId": "0DD20C53-FF5C-EB11-8140-707781834352" }, { "movieId": "01C14AF4-3E37-EB11-8138-778184434310" }, ]
- 源数据:
Comments数组结构
[ { "commentId": "1", "movieId": "0DD20C53-FF5C-EB11-8140-707781834352", "content": "thanks" }, ]
- 期望合并结果
[ { movieId: "0DD20C53-FF5C-EB11-8140-707781834352", comments: [ { commentId: "1", movieId: "0DD20C53-FF5C-EB11-8140-707781834352", content: "thanks", }, ], }, { movieId: "01C14AF4-3E37-EB11-8138-778184434310", comments: [], }, ]
现有实现的异常
当前编写的代码运行后,评论会被错误添加到所有电影对象中。经排查定位,问题出在movieId的匹配逻辑上,对应代码如下:
let result = movies.map((movie) => ({ ...movie, comments: comments.filter((comment) => { comment.movieId = movie.movieId; }), }));
待解决需求
- 掌握该场景下
.map与.filter的正确使用方法 - 获取该数组合并场景下性能更优的实现方案
内容的提问来源于stack exchange,提问作者Monkey D. Teach
相关产品推荐
相关产品推荐

