基于 parent_id 创建树视图
creating a tree view based on 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))。
但是,如果您只需要像您的问题暗示的那样显示即时 children,那么 Enum.filter/2
就是您的朋友。您可以编写一个函数来接受人员列表和 parent 的 ID,您希望查看其 children。
例如,如果您希望在根目录(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}]
我有一个地图列表,我正在努力构建一棵 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))。
但是,如果您只需要像您的问题暗示的那样显示即时 children,那么 Enum.filter/2
就是您的朋友。您可以编写一个函数来接受人员列表和 parent 的 ID,您希望查看其 children。
例如,如果您希望在根目录(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}]