gpt4 book ai didi

javascript - 从祖先数据构建嵌套列表?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:28:47 24 4
gpt4 key购买 nike

给定结构:

{
id: 'id-1',
name: 'name1',
ancestors: []
},{
id: 'id-2',
name: 'name2',
ancestors: []
},{
id: 'id-3',
name: 'name3',
ancestors: ['id-1']
},{
id: 'id-4',
name: 'name4',
ancestors: ['id-3', 'id-1']
}
  • 假设它们没有以任何有意义的方式排序。
  • 祖先字段是一个数组,显示了到顶层的路径。

构建嵌套列表 (ul) 的最有效方法是什么?

我的第一个想法是递归方法,但这似乎很麻烦,因为它会重复搜索整个列表。因为这将是一个在浏览器中运行的 javascript 解决方案,可能会出现问题。

最佳答案

您可以构建一棵树,然后呈现一个嵌套列表。

function getTree(data) {
var o = {};
data.forEach(function (a) {
var parent = a.ancestors[0];
if (o[a.id] && o[a.id].children) {
a.children = o[a.id].children;
}
o[a.id] = a;
o[parent] = o[parent] || {};
o[parent].children = o[parent].children || [];
o[parent].children.push(a);
});
return o.undefined.children;
}

function buildList(tree, target) {
var ul = document.createElement('ul');
tree.forEach(o => {
var li = document.createElement('li');
li.appendChild(document.createTextNode(o.name));
buildList(o.children || [], li);
ul.appendChild(li);
});
target.appendChild(ul);
}

var data = [{ id: 'id-1', name: 'name1', ancestors: [] }, { id: 'id-2', name: 'name2', ancestors: [] }, { id: 'id-3', name: 'name3', ancestors: ['id-1'] }, { id: 'id-4', name: 'name4', ancestors: ['id-3', 'id-1'] }],
tree = getTree(data);

console.log(tree);
buildList(tree, document.body);

关于javascript - 从祖先数据构建嵌套列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49982245/

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