gpt4 book ai didi

javascript - 将对象列表转换为 json 树结构

转载 作者:行者123 更新时间:2023-11-30 17:40:16 28 4
gpt4 key购买 nike

我有一个列表需要转换成json格式。

这个..

var sourceList = [
{ title: "item-1", indent: "0" },
{ title: "item-2", indent: "0" },
{ title: "item-3", indent: "0", folder: true },
{ title: "item-4", indent: "1" },
{ title: "item-5", indent: "1", folder: true },
{ title: "item-6", indent: "2" },
{ title: "item-7", indent: "2" },
{ title: "item-8", indent: "0" }
];

为此..

var targetJson = [
{ title: "item-1" },
{ title: "item-2" },
{ title: "item-3", folder: true, children: [
{ title: "item-4" },
{ title: "item-5", folder: true, children: [
{ title: "item-6" },
{ title: "item-7" }
]},
]},
{ title: "item-8" }
];

以便结果可用于初始化如下所示的树结构。

    item-1
item-2
item-3
.. item-4
.. item-5
.... item-6
.... item-7
item-8

每个源对象的“缩进”属性决定了它相对于前一个对象的位置。

就像如果一个对象的缩进比前一个大,那么它将被视为前一个的 child ,如果它的缩进与前一个相同,那么它将被视为前一个的兄弟。因此,对于具有子项的节点,将出现子属性和文件夹属性。

挑战之一是“第 8 项”,它处于 0 级,而前一个处于 2 级。

需要一个解决方案,最好是在 javascript 中。

最佳答案

我保留了缩进和要添加子元素的元素之间的映射:

// test data
var sourceList = [
{ title: "item-1", indent: "0" },
{ title: "item-2", indent: "0" },
{ title: "item-3", indent: "0", folder: true },
{ title: "item-4", indent: "1" },
{ title: "item-5", indent: "1", folder: true },
{ title: "item-6", indent: "2" },
{ title: "item-7", indent: "2" },
{ title: "item-8", indent: "0" }
];

// init
var targetJson = [];
var roots = { 0 : targetJson};

// actual code:
sourceList.forEach(function(item){
if (!roots[item.indent].splice) {
roots[item.indent] = roots[item.indent].children = [];
}
roots[item.indent].push(item);
if (item.folder) {
roots[+item.indent+1] = item;
}
});

// output
console.log(targetJson);

PS:我在对象中保留了缩进属性,因此您可以检查结果。添加项目后,请随意将其删除。这是无关紧要的。

关于javascript - 将对象列表转换为 json 树结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21230283/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com