我有json
喜欢
[
{ up: 0, id: 1, name: "男裝", level: 1, children:[] },
{ up: 0, id: 2, name: "女裝", level: 1, children: []},
{ up: 1, id: 3, name: "上衣", level: 2, children: []},
{ up: 2, id: 4, name: "上衣", level: 2, children: []},
{ up: 3, id: 5, name: "T穴", level: 3, children: [] },
{ up: 4, id: 6, name: "襯衫", level: 3, children: []},
]
我想
{
up: 0,
id: 1,
name: "男裝",
level: 1,
children: [
{
up: 1,
id: 3,
name: "上衣",
level: 2,
children: [{up: 3, id: 5, name: "T穴", level: 3, children: []}]
}]
},
{
up: 0,
id: 2,
name: "女裝",
level: 1,
children: [
{
up: 2,
id: 4,
name: "上衣",
level: 2,
children: [{ up: 4, id: 6, name: "襯衫", level: 3, children: [] }]
}]
}
我试图像这样分组,但它没有工作
答案 0 :(得分:1)
你可以使用forEach()
循环,你也需要使用一个递归函数来搜索已经添加到结果及其子元素的每个元素,直到找到id为==的对象为up的值为循环中的当前对象。
var data = [
{ up: 0, id: 1, name: "男裝", level: 1, children:[] },
{ up: 0, id: 2, name: "女裝", level: 1, children: []},
{ up: 1, id: 3, name: "上衣", level: 2, children: []},
{ up: 2, id: 4, name: "上衣", level: 2, children: []},
{ up: 3, id: 5, name: "T穴", level: 3, children: [] },
{ up: 4, id: 6, name: "襯衫", level: 3, children: []},
];
var result = [];
data.forEach(function(e) {
if (e.up == 0) {
result.push(e);
} else {
function group(input) {
input.forEach(function(a) {
if (a.id == e.up) {
a.children.push(e);
} else if (a.children.length) {
group(a.children);
}
})
}
group(result)
}
})
console.log(result)
答案 1 :(得分:0)
在描述这样的事情时,通常非常有用地说明或者使用一些伪代码来说明你正在尝试做什么。通过这个练习经常会发现一个解决方案。发布尽可能少,以明确你的观点。
如果我不得不猜测,我会说你要创建N个顶级分支(取决于你有多少级别1)。每个对象都包含一个数组,其中包含一个更高的“级别”对象。
新的顶级数组看起来像(省略不相关的道具):
[
{ level: 1, children [
{ level: 2, children [
{ level: 3, children [] }
] }
] },
{ level: 1, children [
{ level: 2, children [
{ level: 3, children [] }
] }
] }
]
如果这就是你的意思,那么肯定有人可以帮你写出来,这并不难。
但是......你总是会有足够的物体在水平上均匀分布吗?是否会跳过某个级别?你有不同的“等级”计数(例如,3级2级,7级4级)?等等?你会用插入,删除等改变这个结构吗?
要解决这个问题,你应该考虑的不是“给我写代码来执行此操作”,而是“创建这种关系的最佳数据结构是什么,这样我就可以添加/编辑/删除/查找没有太多混乱?“
我强烈地,强烈地建议您花一点时间阅读有关基本数据结构的内容:字典,数组以及如何使用它们来构建树和链接列表。
那就能得到你想要的东西。除此之外,我很乐意实现代码来实现你的基本情况,无论它是否真的有用,一旦我们得到我的小时费用:)