gpt4 book ai didi

Javascript递归包装 child (俄罗斯套娃)

转载 作者:行者123 更新时间:2023-11-30 16:26:42 24 4
gpt4 key购买 nike

我在尝试基于类似于下面的 json 文档生成文本文档时遇到困难。

[{
"title": "item 1",
"nodes": [{
"title": "item 1.1"
"nodes": [{
"title": "item 1.1.1"
}, {
"title": "item 1.1.2"
}, {
"title": "item 1.1.3",
"nodes": [{
"title": "item 1.1.3.1"
}, {
"title": "item 1.1.3.2"
}, {
"title": "item 1.1.3.3"
}]
}]
}]
}]

我有一个简单的递归函数,可以正常工作,但是我想生成类似俄罗斯套娃的东西:

<branch title="item 1">
<branch title="item 1.1">
<item title="item 1.1.1"></item-end>
<item title="item 1.1.2"></item-end>
<branch title="1.1.3">
<item title="1.1.3.1"></item-end>
<item title="1.1.3.2"></item-end>
<item title="1.1.3.3"></item-end>
<branch-end>
<branch-end>
<branch-end>

每个 child 都应由 parent 以适当的缩进包装。

关于如何解决这个问题的任何想法?我正在使用 nodejs 顺便说一句!

最佳答案

这样的事情怎么样(使用两个助手来生成 html):

帮助者。

function pad(depth) {return '--'.repeat(depth);}

function makeBranch(title, body, depth) {
return pad(depth) + '<branch title="'+ title + '">' +
body + pad(depth) + '<branch-end>';
}

function makeItem(title, depth) {
return pad(depth) + '<item title="'+ title + '"></item-end>';
}

定义。

function gen(tree, depth) {
if (!tree.nodes) {
return makeItem(tree.title, depth);
} else {
return makeBranch(tree.title, tree.nodes.reduce(function(str, branch) {
return str + gen(branch, depth + 1);
}, ''), depth);
}
}

用法。

// Pass the root of the tree with depth = 0
gen(tree[0], 0);

//=> Output (formatted here for easier viewing):
"<branch title="item 1">
--<branch title="item 1.1">
----<item title="item 1.1.1"></item-end>
----<item title="item 1.1.2"></item-end>
----<branch title="item 1.1.3">
------<item title="item 1.1.3.1"></item-end>
------<item title="item 1.1.3.2"></item-end>
------<item title="item 1.1.3.3"></item-end>
----<branch-end>
--<branch-end>
<branch-end>"

谢谢 zerkms进行更正。

关于Javascript递归包装 child (俄罗斯套娃),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34031285/

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