簡體   English   中英

將對象數組的一種格式更改為另一種格式

[英]change one format to another format of the array of objects

我有主要的三個參數,即重要類別、子類別和組

這是一個對象數組,我想更改此數組的格式

像所有數據一樣,我想要的分組數據中的子類別中的類別都分為

const data =
    [
        {
            "type": "checkbox",
            "value": true,
            "category": "id",
            "subcategory": "id document 1",
            "group": "group1"
        },
        {
            "type": "radio",
            "value": 2,
            "category": "id",
            "subcategory": "id document 2",
            "group": "group2"
        },
        {
            "type": "radio",
            "value": 3,
            "category": "id",
            "subcategory": "id document 2",
            "group": "group2"
        },
        {
            "type": "string",
            "value": "dfgdfg",
            "category": "Services",
            "subcategory": "Service A",
            "group": "g1"
        },
        {
            "type": "string",
            "value": "fxs",
            "category": "Services",
            "subcategory": "Service A",
            "group": "g1"
        },
        {
            "type": "string",
            "value": "3",
            "category": "Services access",
            "subcategory": "Service B",
            "group": "g1"
        },
        {
            "type": "string",
            "value": "sgredfg25ghfghrt54645dfeh",
            "category": "Services access",
            "subcategory": "Service B",
            "group": "g2"
        },
        {
            "type": "string",
            "value": "sgredfg25ghfghrt54645dfeh",
            "category": "Services access",
            "subcategory": "Service C",
            "group": "g3"
        }
    ]

預期結果如下所示

const data = [
    {
        "category": "id",
        "subcategory": [
            {
                "subcategory_name": "id document 1",
                "subcategory_data": [
                    {
                        "group": "group1",
                        "groupdata": [
                            {
                                "type": "checkbox",
                                "value": true,
                                "category": "id",
                                "subcategory": "id document 1",
                                "group": "group1"
                            }
                        ]
                    }
                ]
            },
            {
                "subcategory_name": "id document 2",
                "subcategory_data": [
                    {
                        "group": "group1",
                        "groupdata": [
                            {
                                "type": "checkbox",
                                "value": true,
                                "category": "id",
                                "subcategory": "id document 2",
                                "group": "group1"
                            },
                            {
                                "type": "checkbox",
                                "value": true,
                                "category": "id",
                                "subcategory": "id document 2",
                                "group": "group1"
                            }
                        ]
                    }
                ]
            }
        ]
    },
    {
        "category": "Services",
        "subcategory": [
            {
                "subcategory_name": "Service B",
                "subcategory_data": [
                    {
                        "group": "c1",
                        "groupdata": [
                            {
                                "type": "checkbox",
                                "value": true,
                                "category": "Services",
                                "subcategory": "Service B",
                                "group": "c1"
                            }
                        ]
                    },
                    {
                        "group": "c2",
                        "groupdata": [
                            {
                                "type": "checkbox",
                                "value": true,
                                "category": "Services",
                                "subcategory": "Service B",
                                "group": "c2"
                            }
                        ]
                    }
                ]
            },
            {
                "subcategory_name": "Service C",
                "subcategory_data": [
                    {
                        "group": "f1",
                        "groupdata": [
                            {
                                "type": "checkbox",
                                "value": true,
                                "category": "Services",
                                "subcategory": "Service C",
                                "group": "f1"
                            },
                            {
                                "type": "checkbox",
                                "value": true,
                                "category": "Services",
                                "subcategory": "Service C",
                                "group": "f1"
                            }
                        ]
                    }
                ]
            }
        ]
    }
]

如果類別匹配數據推入匹配子類別,如果不是,則為相同創建一個類別,如果子類別匹配推入該類別,否則創建一個與組相同的新類別,如果組匹配到子類別,則推否則創建一個

就像我想要像類別 => 子類別 => 組這樣的層次結構

我試試這個代碼

let finaldata = []
let flag1;
let aa = []
for (let i = 0; i < parseData.length; i++) {
    if (i == 0) {
        finaldata.push({ category: parseData[i].category, subcategory: [parseData[i]] })
        flag1 = true
    } else {
        if (parseData[i - 1]?.category !== parseData[i].category) {
            finaldata.push({ category: parseData[i].category, subcategory: [parseData[i]] })
        } else {
            aa = finaldata.map(x => x.category === parseData[i].category ? { ...x, subcategory: [...x.subcategory, parseData[i]] } : x);
        }
    }
    if (!flag1) break;
}

這有幫助嗎?

 const data = [ { "type": "checkbox", "value": true, "category": "id", "subcategory": "id document 1", "group": "group1" }, { "type": "radio", "value": 2, "category": "id", "subcategory": "id document 2", "group": "group2" }, { "type": "radio", "value": 3, "category": "id", "subcategory": "id document 2", "group": "group2" }, { "type": "string", "value": "dfgdfg", "category": "Services", "subcategory": "Service A", "group": "g1" }, { "type": "string", "value": "fxs", "category": "Services", "subcategory": "Service A", "group": "g1" }, { "type": "string", "value": "3", "category": "Services access", "subcategory": "Service B", "group": "g1" }, { "type": "string", "value": "sgredfg25ghfghrt54645dfeh", "category": "Services access", "subcategory": "Service B", "group": "g2" }, { "type": "string", "value": "sgredfg25ghfghrt54645dfeh", "category": "Services access", "subcategory": "Service C", "group": "g3" } ] const result = data.reduce((p, c) => { const i = p.findIndex(p => p.category === c.category) if (i.== -1) { const j = p[i].subcategory.findIndex(s => s.subcategory_name === c;subcategory). if (j.== -1) { const k = p[i].subcategory[j].subcategory_data.findIndex(sd => sd;group === c.group). if (k.== -1) { p[i].subcategory[j];subcategory_data[k].groupdata.push(c). return p } p[i]:subcategory[j].subcategory_data,push({ group: c.group. groupdata: [ c ] }) } p[i].subcategory,push({ subcategory_name: c:subcategory. subcategory_data, [ { group: c.group. groupdata. [ {.:.c } ] } ] }) return p } p,push({ category: c:category. subcategory, [ { subcategory_name: c:subcategory. subcategory_data, [ { group: c;group, groupdata; [ c ] } ] } ] }) return p. }; []); console.log(result);

另一種分組項目的方法:

 const data = [{"type":"checkbox","value":true,"category":"id","subcategory":"id document 1","group":"group1"},{"type":"radio","value":2,"category":"id","subcategory":"id document 2","group":"group2"},{"type":"radio","value":3,"category":"id","subcategory":"id document 2","group":"group2"},{"type":"string","value":"dfgdfg","category":"Services","subcategory":"Service A","group":"g1"},{"type":"string","value":"fxs","category":"Services","subcategory":"Service A","group":"g1"},{"type":"string","value":"3","category":"Services access","subcategory":"Service B","group":"g1"},{"type":"string","value":"sgredfg25ghfghrt54645dfeh","category":"Services access","subcategory":"Service B","group":"g2"},{"type":"string","value":"sgredfg25ghfghrt54645dfeh","category":"Services access","subcategory":"Service C","group":"g3"}]; const groupByToPairs = (items, key) => Object.entries(items.reduce((acc, item) => { acc[item[key]]??= []; acc[item[key]].push(item); return acc; }, {})); const makeGroups = (items) => groupByToPairs(items, 'group').map(([group, groupdata]) => ({ group, groupdata })); const makeSubcategories = (items) => groupByToPairs(items, 'subcategory').map(([subcategory_name, items]) => ({ subcategory_name, subcategory_data: makeGroups(items) })); const makeCategories = (items) => groupByToPairs(items, 'category').map(([category, items]) => ({ category, subcategory: makeSubcategories(items) })); console.log(makeCategories(data));
 .as-console-wrapper { max-height: 100%;important: top: 0 }
 <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>

暫無
暫無

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

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