首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对嵌套数组中的每个项进行分组

如何对嵌套数组中的每个项进行分组
EN

Stack Overflow用户
提问于 2019-04-01 07:33:55
回答 1查看 622关注 0票数 1

我有一个json数组的表单:

代码语言:javascript
复制
    [{
        "published": true,
        "tags": ["tag1", "tag2"],
        "categories": ["cat1"],
        "author": "some name",
        "post-format": "standard",
        "title": "Second Post,",
        "url-slug": "second-post",
        "first-published-on": "2019-03-28",
        "last-updated-on": "2019-03-28",
        "meta": {
            "title": "Second Post",
            "description": "Second post."
        },
        "excerpt": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
        "path": "2019/03/28/SecondPost.md"
    }, {
        "published": true,
        "tags": ["tag1", "tag2", "tag3"],
        "categories": ["cat1", "cat2"],
        "author": "some name",
        "post-format": "standard",
        "title": "Getting Started",
        "url-slug": "getting-started",
        "first-published-on": "2019-03-20",
        "last-updated-on": "2019-03-20",
        "meta": {
            "title": "Getting Started",
            "description": "Getting started post."
        },
        "excerpt": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
        "path": "2019/03/20/GettingStarted.md"
    }]

我想将它们按标签分组,形式如下:

代码语言:javascript
复制
[{
   "tag1": [{...}, {...}], 
   "tag2": [{...}, {...}], 
   "tag3": [{...}]
}]

我曾尝试这样做:

代码语言:javascript
复制
const groupedByTag = _.groupBy(blogMetadata, function(postmetadata) {
        postmetadata.tags.map(tag => {
          return tag
        })
      })

显然,上面的代码是不正确的,不起作用。我看过一个相关的post,但没有取得多大进展。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2019-04-01 07:37:13

您可以使用reduceforEach

这里的想法是

  • 首先,我们循环遍历obj变量的每个元素。
  • 对于每个元素,我们循环遍历tags属性。
  • 我们检查op是否已经有那个标记,然后按下值,否则就会向op对象添加一个新的键,并相应地添加相应的值。

代码语言:javascript
复制
let obj = [{"published": true,"tags": ["tag1", "tag2"],"categories": ["cat1"],"author": "some name","post-format": "standard","title": "Second Post,","url-slug": "second-post","first-published-on": "2019-03-28","last-updated-on": "2019-03-28","meta": {"title": "Second Post","description": "Second post."},"excerpt": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt","path": "2019/03/28/SecondPost.md"}, {"published": true,"tags": ["tag1", "tag2", "tag3"],"categories": ["cat1", "cat2"],"author": "some name","post-format": "standard","title": "Getting Started","url-slug": "getting-started","first-published-on": "2019-03-20","last-updated-on": "2019-03-20","meta": {"title": "Getting Started","description": "Getting started post."},"excerpt": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt","path": "2019/03/20/GettingStarted.md"}]

let final = obj.reduce((op,inp) => {
  inp.tags.forEach(e => {
    op[e] = op[e] || []
    op[e].push(JSON.parse(JSON.stringify(inp)))
  }) 
  return op
},{})

console.log(final)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55450096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档