【发布时间】:2021-06-05 06:01:45
【问题描述】:
我已经第四天了。
需要
const base = [
{ "rel": 1, "title": "a", "path": "AAA" },
{ "rel": 2, "title": "b", "path": "AAA/BBB" },
{ "rel": 3, "title": "c", "path": "AAA/BBB/CCC" },
{ "rel": 4, "title": "d", "path": "AAA/BBB/DDD" },
{ "rel": 5, "title": "e", "path": "AAA/CCC" },
{ "rel": 6, "title": "f", "path": "BBB" }]
转换为:
{
"a": {
"rel": 1,
"b": {
"rel": 2,
"c": {"rel": 3},
"d": {"rel": 4}
},
"e": {"rel": 5}
},
"f": {"rel": 6}
}
我之前的代码:
console.log(start(base));
function start(arr, index = 0, lvl = 0, res = {}) {
let { rel, title, path } = arr[index];
path = path.split("/");
const how = path.length;
let lvlNext = null; if (arr[index + 1]) { lvlNext = arr[index + 1].path.split("/"); lvlNext = lvlNext.length; }
if (how == lvl) res = { rel }
if (how > lvl) res[title] = start(arr, index, lvl + 1, res[title]);
if (lvlNext && how == lvl) return start(arr, index + 1, lvl, res);
return res
}
通过“递归”来做最有意义,但我后来无法回到顶部(可能甚至有几个)
附言。对不起,我不会写英文
【问题讨论】:
-
到目前为止你尝试了什么?
标签: javascript arrays recursion replace