
tree
扁平转树
方法一:filter和map递归
使用递归算法将扁平数组转换为树形对象:
1 | |
该算法的流程为:
使用 filter() 函数过滤出所有的子节点。
使用 map() 函数构造每个子节点的新结构,并使用递归来处理子节点的 children 属性。
方法二
1 | |
方法三
1 | |
树转扁平
方法一:递归
在 js中,可以使用递归算法将树形结构数据转换为扁平数组。
下面是一个简单的例子,它演示了如何将树形数据转换为扁平数组:
1 | |
该方法通用性较强,对树形结构数组数据内部具体的属性名称要求较小(除 childrens)。
方法二:reduce
1 | |
该算法的流程为:
使用 reduce() 函数遍历每个节点,并将父节点的 id 作为参数传递给递归函数。
使用 push() 函数将当前节点添加到结果数组中。
使用 concat() 函数将递归调用的结果与结果数组连接在一起。
如果当前节点有 children 属性,则递归调用 convertToFlat() 函数,并将当前节点的 id 作为父节点传递给函数。
注意:该方法返回的扁平结构数据未将 children属性删除,因此存在冗余的数据。
这是一种将树形结构数据转换为扁平数组的方法,如果有其他特定的需求,还可以使用其他方法来转换数据,例如使用广度优先遍历算法,使用队列存储节点。
方法三
1 | |
该算法的流程为:
创建一个空的扁平数组。
递归遍历树形数组中的每个节点,将当前节点添加到扁平数组中。
对于当前节点的子节点,继续使用递归,并将子节点添加到扁平数组中。
返回扁平数组
注意:该方法需要手动构造push 到扁平数组的对象,通用性较差。
