首页 > 解决方案 > 来自响应数据的 javascript 映射

问题描述

我有一个 laravel 应用程序,我在其中获取响应数据并将重复项复合到评论数组中,如下所示:

const dataMap = response.data.reduce((map, { taskt_id, comment_name, comment, ...extra }) => {
      let item = (map.has(taskt_id) ? map : map.set(taskt_id, { ...extra, comments: [] })).get(taskt_id)
      return item.comments.push({ comment_name, comment }), map

    }, new Map())

这一直工作得很好,但是现在我的响应数据中返回了另一个数据集,该数据集也有多个记录(一个类别但多个类别详细信息),当我使用此方法时,它不再有效,我的新类别数组是空的:

 const dataMap = response.data.reduce((map, { taskt_id, comment_name, comment, category, category_detail, ...extra }) => {
      let item = (map.has(taskt_id) ? map : map.set(taskt_id, { ...extra, comments: [], categories: [] })).get(taskt_id)
      return item.comments.push({ comment_name, comment }), map
      return item.categories.push({ category, category_detail }), map

    }, new Map())

因此,也许我以错误的方式向其中添加了另一个数组,但是如何以我的工作评论版本的行为方式向此映射添加更多数组?

标签: javascript

解决方案


您在 item.comments.push 之后返回地图并丢弃其余部分。

你可以替换这个:

return item.comments.push({ comment_name, comment }), map
return item.categories.push({ category, category_detail }), map

有了这个:

item.comments.push({ comment_name, comment })
item.categories.push({ category, category_detail })
return map

因此,您将评论和类别添加到您的项目,然后返回地图。


推荐阅读