簡體   English   中英

如何對嵌套在數組中的數據進行分組?

[英]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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM