[英]How to convert a javascript array of Objects from one format to another format?
[英]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.