gpt4 book ai didi

Javascript:将平面 json 结构解析并排序为嵌套数组?

转载 作者:行者123 更新时间:2023-11-30 17:09:43 25 4
gpt4 key购买 nike

我从这样的平面 JSON 输入开始(简单示例):

[
{id:1, value:'child1', parentId:2, sortOrder:1},
{id:2, value:'root1', parentId:null, sortOrder:1},
{id:3, value:'root2', parentId:null, sortOrder:2},
{id:4, value:'child2', parentId:1, sortOrder:2},
{id:5, value:'root3', parentId:null, sortOrder:3},
{id:6, value:'child1', parentId:2, sortOrder:1},
{id:7, value:'root4', parentId:null, sortOrder:4}
];

输入可以是任意深度和长度,需要根据父子关系重新格式化为嵌套数组的集合,并在每个嵌套级别按升序排序。

原生 JS 或 UnderscoreJS 均可用于格式化输出。

输出将被格式化为具有基本形式的 json 结构:

root1 
child1
child2
root2
child1
child1
child2
child2

etc...

其中每个元素都是一个 JSON 对象。

嵌套深度可以是任何深度,因为数据很可能来自具有上述平面结构的数据库表。

有什么想法吗?

最佳答案

我会按如下方式完成这项工作。我本可以使用 value 属性来附加嵌套对象,但当时的问题还不清楚。相反,我创建了 children 属性来构建嵌套结构。

var flat = [
{id:1, value:'child1', parentId:2, sortOrder:1},
{id:2, value:'root1', parentId:null, sortOrder:1},
{id:3, value:'root2', parentId:null, sortOrder:2},
{id:4, value:'child2', parentId:1, sortOrder:2},
{id:5, value:'root3', parentId:null, sortOrder:3},
{id:6, value:'child1', parentId:2, sortOrder:1},
{id:7, value:'root4', parentId:null, sortOrder:4}
],
lut = flat.sort((a,b) => a.sortOrder - b.sortOrder)
.reduce((t,o) => { o.children === void 0 && (o.children = []);
t[o.id] = t[o.id] === void 0 ? o : (o.children = t[o.id].children,o);
o.parentId !== null &&
(t[o.parentId] !== void 0 ? t[o.parentId].children.push(o)
: t[o.parentId] = {id: o.parentId, children: [o]});
return t;
},{}),
nested = Object.keys(lut).reduce((a,k) => lut[k].parentId === null ? a.concat(lut[k]): a,[]);
console.log(nested);

此外,如果您想将子对象放置在父对象的 children 数组属性中,那么 sort 阶段就不是必需的了。

关于Javascript:将平面 json 结构解析并排序为嵌套数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27280616/

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