如何将数组转换为 JavaScript 对象
How to convert array into JavaScript object
我有一个这样的数组(类似于 JSON 数组),长度为 n:
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
对对象进行分类。 (请注意“Phrase 4”和“Phrase 5”的格式。)
Reduce the dataset by accessing the categorynumber
as the main key, and the optionnumber
as the subkey. You can apply new options to the existing category by spreading (...
) 新选项并将其包装在一个数组中。
如果您要追加额外的短语,您还需要获取现有数组并传播新值。
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"]
}
}
-->
我有一个这样的数组(类似于 JSON 数组),长度为 n:
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
对对象进行分类。 (请注意“Phrase 4”和“Phrase 5”的格式。)
Reduce the dataset by accessing the categorynumber
as the main key, and the optionnumber
as the subkey. You can apply new options to the existing category by spreading (...
) 新选项并将其包装在一个数组中。
如果您要追加额外的短语,您还需要获取现有数组并传播新值。
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"]
}
}
-->