【发布时间】:2021-09-02 11:26:08
【问题描述】:
我正在尝试尽可能有效地减少数组。我当前的数组如下所示:
myArr = [
{cat: "Wires", subCat: "Wires & Connection", description: "Demo Description for Green Wire", id: 4049, name: "green_wire"},
{cat: "Wires", subCat: "Wires & Connection", description: "Demo Description for Red Wire", id: 1224, name: "red_wire"},
{cat: "Fixtures", subCat: "Lights", description: "The Bullet FL2832B uplight casts a broad, flatteri…s include an included heavy-duty composite stake.", id: 1360, name: "bullet_lights"},
{cat: "Fixtures", subCat: "Spot Lights", description: "Demo Description for Walkway Lights", id: 8602, name: "walkway_lights"},
{cat: "Controls", subCat: "Power Sources", description: "Description for 600w SS Transformer", id: 7738, name: "600w_ss_transformer"},
{cat: "", subCat: "", description: "Project Background Image", id: 8029, name: "bgImg"}
];
我想通过首先基于“cat”然后在“cat”内部对子项进行排序来将此数组简化为这种格式,我想根据“subCat”对子项进行排序。像这样的:
final = [
{
cat: "Wires",
children : [
{
subCat: "Wires & Connection",
children: [
{cat: "Wires", subCat: "Wires & Connection", description: "Demo Description for Green Wire", id: 4049, name: "green_wire"},
{cat: "Wires", subCat: "Wires & Connection", description: "Demo Description for Red Wire", id: 1224, name: "red_wire"}
]
}
]
},
{
cat: "Fixtures",
children : [
{
subCat: "Lights",
children : [
{cat: "Fixtures", subCat: "Lights", description: "The Bullet FL2832B uplight casts a broad, flatteri…s include an included heavy-duty composite stake.", id: 1360, name: "bullet_lights"}
]
},
{
subCat: "Spot Lights",
children : [
{cat: "Fixtures", subCat: "Spot Lights", description: "Demo Description for Walkway Lights", id: 8602, name: "walkway_lights"}
]
}
]
},
{
cat: "Controls",
children : [
{
subCat: "Power Sources",
children: [
{cat: "Controls", subCat: "Power Sources", description: "Description for 600w SS Transformer", id: 7738, name: "600w_ss_transformer"}
]
}
]
},
{
cat: "",
children : [
{
subCat: "",
children: [
{cat: "", subCat: "", description: "Project Background Image", id: 8029, name: "bgImg"}
]
}
]
}
]
到目前为止,我已经尝试过,但这仅通过“subCat”组织数组。我想将它进一步嵌套到“猫”:
const formatedObjects = objects.reduce((acc, d) => {
const found = acc.find(a => a.subCat === d.subCat);
const value = {
id: d.id,
name: d.name,
subCat: d.subCat,
cat: d.cat,
description: d.description
}; // the element in data property
if (!found) {
acc.push({subCat:d.subCat, children: [value]}) // not found, so need to add data property
}
else {
found.data.push(value) // if found, that means data property exists, so just push new element to found.data.
}
return acc;
}, []);
知道如何有效地做到这一点吗?
【问题讨论】:
-
请分享您的尝试。如果需要,我们将尝试优化/改进它。
-
用我迄今为止尝试过的内容更新了问题。
标签: javascript arrays sorting reduce