基于parent_id创建树视图



我有一个地图列表,我正在努力构建一个html树,单击一个元素后,显示其子列表。做这件事的最好方法是什么?

例如:我们有一份地图列表:[%Person{name: "name1", id: 1, parent_id: nil}, %Person{name: "name2", id: 2, parent_id: 1},%Person{name: "name3", id: 3, parent_id: 2}]

我想得到这样的东西:

name1 ↓
name2 ↓
name 3
我将感激你的帮助!

这可能是一个棘手的问题,因为如果你需要遍历到树的最后一个叶子,你必须遍历列表很多次(我会让别人告诉你确切的O(n))。

然而,如果你只需要显示你的问题所暗示的直接孩子,Enum.filter/2是你的朋友。您可以编写一个函数,接受您希望看到的人的列表和孩子的父母的id。

例如,如果您希望查找根目录(parent_id = nil所在位置)的所有人员:

iex> parent_id = nil 
nil
iex> Enum.filter(people, fn %{parent_id: id} -> id == parent_id end)
[%{id: 1, name: "name1", parent_id: nil}]

最新更新