我有一個長度為 n 的陣列(類似于 JSON 陣列):
const mainData = [
{
phrase: "Phrase 1",
categorynumber: 1,
optionnumber: 1,
},
{
phrase: "Phrase 2",
categorynumber: 1,
optionnumber: 2,
},
{
phrase: "Phrase 3",
categorynumber: 2,
optionnumber: 1,
},
{
phrase: "Phrase 4",
categorynumber: 3,
optionnumber: 1,
},
{
phrase: "Phrase 5",
categorynumber: 3,
optionnumber: 1,
},
{
phrase: "Phrase 6",
categorynumber: 3,
optionnumber: 2,
},
];
我想將其轉換為嵌套物件,如下所示:
jsObject = {
1: {
1: ["Phrase 1"],
2: ["Phrase 2"],
},
2: {
1: ["Phrase 3"],
},
3: {
1: ["Phrase 4", "Phrase 5"],
2: ["Phrase 6"],
},
};
本質上,物件是根據categorynumber然后分類的optionnumber。(請注意“第 4 段”和“第 5 段”的格式。)
uj5u.com熱心網友回復:
通過訪問categorynumber作為主鍵和 optionnumber作為子鍵來減少資料集。您可以通過擴展( ...) 新選項并將其包裝在陣列中來將新選項應用于現有類別。
如果您要附加其他短語,您還需要獲取現有陣列并傳播新值。
const mainData = [
{ phrase: "Phrase 1", categorynumber: 1, optionnumber: 1, },
{ phrase: "Phrase 2", categorynumber: 1, optionnumber: 2, },
{ phrase: "Phrase 3", categorynumber: 2, optionnumber: 1, },
{ phrase: "Phrase 4", categorynumber: 3, optionnumber: 1, },
{ phrase: "Phrase 5", categorynumber: 3, optionnumber: 1, },
{ phrase: "Phrase 6", categorynumber: 3, optionnumber: 2, },
];
const jsObject = mainData.reduce((acc, { phrase, categorynumber, optionnumber }) => ({
...acc,
[categorynumber]: {
...(acc[categorynumber] ?? {}),
[optionnumber]: [...(acc[categorynumber]?.[optionnumber] ?? []), phrase]
}
}), {});
console.log(jsObject);
.as-console-wrapper { top: 0; max-height: 100% !important; }
<!--
jsObject = {
1: {
1: ["Phrase 1"],
2: ["Phrase 2"]
},
2: {
1: ["Phrase 3"]
},
3: {
1: ["Phrase 4", "Phrase 5"],
2: ["Phrase 6"]
}
}
-->
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/470171.html
標籤:javascript 数组 json 目的 嵌套的
下一篇:雪花決議JSON并添加聚合列
