json - CFML/JS 从普通 SQL 创建嵌套的 JSON/数组
问题描述
我想从一个普通的 json 数组构建一个树结构。常规深度约为。6/7(最多 10 条),大约有 5,000 条记录。我的输入 json 看起来像这样
[3,"01","GruppenAnfangHook",1,0,1,0,"Installationsmaterial",1.0,"",null,null,0.0,-1.0,null,803.0300,803.0300,0.00000,1,1]
[5,"01.001","JumboAnfangHook",3,0,3,0,"MBS Wandler 1.000",6.0,"St",null,null,0.0,-6.0,0.0000,336.7800,56.1300,0.00000,2,2],
[38,"","ArtikelHook",3,5,3,0,"ASK 61.4 1000/5A 5VA Kl.1 Preis lt. Hr. K am 16.05.17",6.0,"stk",6.0,6.0,0.0,-6.0,null,21.5000,21.5000,0.00000,3,3]
但我需要像这样的孩子
{"0":34,1":"02.003",2":"JumboBegin","3":26,"4":0, "5":26,"6":0, "children":[
{ "0":36,"1":"", "2":"Article","3":26,"4":34,"5":26,6:"0", 7: "Artikel"},
{ "0":35,"1":"", "2":"JumboEnd",3":26,"4":34, "5":26, 6:"0",7:"Stunde"}
]}
到目前为止,我最好的方法是在前端使用以下 JS 函数构建子结构
function nest(data, parentId = 0) {
return data.reduce((r, e) => {
let obj = Object.assign({}, e)
if (parentId == e[4]) {
let children = nest(data, e[0])
if (children.length) obj.children = children
r.push(obj)
}
return r;
}, [])}
它运行良好且快速(< 1s),记录量很少(<500),但我的浏览器开始冻结在 2,000 及以上。
我的想法是数据太多,所以我尝试在 CFML 后端解决它。由于我是递归新手,Ben Nadels 博客帮助了我很多,所以我使用了他关于递归的帖子,并使用示例数据创建了一个工作示例。
q = queryNew("id,grpCol,jumCol,leiCol,name,typ,order");
grpCol 是 0 级,最多可以放置 5 个组,在这些组中可以放置两种容器(jumCol 和 leiCol),它们可以彼此放置,但不能放置在它们自己中。
但是现在我无法将其转换为具有子成员的结构数组。示例中作为输出生成的 HTML 树的结构正是我想要的前端 JSON 的结构。由于我没有得到递归,如何将它存储在函数外部的数组中。我的目标是最终返回 serzializeJson(array)。
解决方案
推荐阅读
- react-native - 什么是 AsyncStorage *for*?
- flutter - Flutter MultiProvider的所有provider数据如何重新初始化?
- mysql - MySQL 关系有限制
- django - 如何将类函数继承到 Django 模型中?
- google-apps-script - 如何根据表单提交创建事件?
- python - ImportError:无法导入名称 DefaultEngineStrategy
- kubernetes - 将 default.yaml 秘密环境传递给部署
- python - 尽管丢失在内存中,对象如何引用自己?
- spring - Spring ServletRegistrationBean 未在 SPOCK 测试中映射
- javascript - 调用某些事件后如何取回 [this] 的原始上下文
。点击()