如何对嵌套在数组中的数据进行分组?

How do I group data that is nested in an array?

我有一个对象数组,然后在每个对象中我有另一个数组,我想根据类别名称对对象数组中的数据进行分组。我试着用 reduce 函数来做,但它基本上给我相同的数据(它甚至没有转换),就像它甚至没有调用。

我的数据

data = [
    {
        name: "listName",
        id:434343,
        data: [
            {
                id:434343,
                categoryName: school, 

            }, 
            {
                id:234343,
                categoryName: house, 
                
            },
            {
                id:2000,
                categoryName: school, 
                
            },
            {
                id:2333,
                categoryName: house, 
                
            }
        ]
    }, 
    {
        name: "anotherListName",
        id:434343,
        data: [
            {
                id:434343,
                categoryName: school, 

            }, 
            {
                id:234343,
                categoryName: house, 
                
            },
            {
                id:2000,
                categoryName: school, 
                
            },
            {
                id:2333,
                categoryName: house, 
                
            }
        ]
    }
]

我的代码

list.forEach(d =>
    d.data.reduce((acc, currrent) => {
      (acc[currrent.categoryName] = acc[currrent.categoryName] || []).push(
        currrent
      )
      return acc
    }, {})
  )

我希望如何转换数据

transformed = [
    {
        name: "listName",
        id:43453,
        data: {
            school: [
               {
                id:434343,
                categoryName:school   
               }, 
               {
                id:2000,
                categoryName:school   
               }, 
            ],
            house: [
               {
                id:234343,
                categoryName:house   
               }, 
               {
                id:2333,
                categoryName:house   
               }, 
            ],
        } 
    },
    {
        name: "listName",
        id:43453,
        data: {
            school: [
               {
                id:434343,
                categoryName:school   
               }, 
               {
                id:2000,
                categoryName:school   
               }, 
            ],
            house: [
               {
                id:234343,
                categoryName:house   
               }, 
               {
                id:2333,
                categoryName:house   
               }, 
            ],
        } 
    },
]

你可以使用 mapreduce

来做这样的事情

const transform = data => data.map(({name, id, data}) => {
  return {
    name,
    id,
    data: data.reduce((res, {id, categoryName}) => {
      return {
        ...res,
        [categoryName]: [...(res[categoryName] || []), {id, categoryName }]
      }
    }, {})
  }
})



const data = [{
    name: "listName",
    id: 434343,
    data: [{
        id: 434343,
        categoryName: 'school',

      },
      {
        id: 234343,
        categoryName: 'house',

      },
      {
        id: 2000,
        categoryName: 'school',

      },
      {
        id: 2333,
        categoryName: 'house',

      }
    ]
  },
  {
    name: "anotherListName",
    id: 434343,
    data: [{
        id: 434343,
        categoryName: 'school',

      },
      {
        id: 234343,
        categoryName: 'house',

      },
      {
        id: 2000,
        categoryName: 'school',

      },
      {
        id: 2333,
        categoryName: 'house',

      }
    ]
  }
]

const result = transform(data)


console.log(result)