运用场景:一个树形数据结构,后台返回最后一层的子集的id , 因为是联级选择器,我需要拿到所有的由所有父级id 组成的数组。嵌套的级数是不确定的。 const data = [ { id: 1, name: '大别墅', children: [ ...
本文实例讲述了js 递归json树实现根据子
id
查父
id
的方法。分享给大家供大家参考,具体如下:
最近做了一个类似用js实现思维导图的功能,作为思维导图,一定会有树状结构的数据产生,在操作里面的节点时会经常需要查找节点 的父节点及父节点。
对于未知层级的树状数据,用for循环是无法实现的,因为不知道要循环几层,那么最合适的方法就是用js递归
界面结构:
json数据:
orgTreeData:{
node
Id
:19A5B,
nodeName:预分析用户:1313.85万人,
nodeType:root,
expand:true,
Iterator iter = list.iterator();
while(iter.hasNext()){
Student student = (Student)iter.next();
if(i.equals(student.getParent
id
())){
list2.add(student.get
Id
());
getAll(student.get
Id
(),list);
return list2;
iveiw Cascader 级联选择 组件 v-model的数据是一个数组类型,工作中如果需要回显的话,就需要传递所有
父级
元素的
ID
所组成的数组,但是后台只存放了目标元素的
ID
,所以只能自己去遍历数据获取了。
综上所述,需求确定了,就是:根据元素
ID
遍历树形结构,查
找到
所有父元素
ID
。
function findParent(array, value, valueName = 'value', childrenName = 'children') {
if (!value || !Array.isArray(array)) return []
const result = []
const seek = (array, value) => {
let parentValue = ''
const up = (array, val
您可以使用递归算法实现树形结构的父
子级
查询。首先,您需要根据节点的
ID
和parent
ID
来构建树形结构,然后根据节点的
ID
查询其所有
子级
,或者根据子节点的
ID
查询其父节点。以下是Java代码示例:
// 树形结构节点类
public class TreeNode {
private String
id
;
private String parent
Id
;
private List<TreeNode> children;
public TreeNode(String
id
, String parent
Id
) {
this.
id
=
id
;
this.parent
Id
= parent
Id
;
children = new ArrayList<>();
// 添加子节点
public vo
id
addChild(TreeNode node) {
children.add(node);
// 获取所有子节点
public List<TreeNode> getChildren() {
return children;
// 获取父节点
public TreeNode getParent() {
// 查询父节点
return null;
// 构建树形结构
public static TreeNode buildTree(List<TreeNode> nodeList) {
Map<String, TreeNode> map = new HashMap<>();
// 将所有节点添加到map中
for (TreeNode node : nodeList) {
map.put(node.get
Id
(), node);
// 构建树形结构
for (TreeNode node : nodeList) {
if (!node.getParent
Id
().equals("0")) {
map.get(node.getParent
Id
()).addChild(node);
// 返回根节点
return map.get("0");
// 根据节点
ID
获取所有子节点
public static List<TreeNode> getChildNodeList(TreeNode node) {
List<TreeNode> childNodeList = new ArrayList<>();
if (node != null && !node.getChildren().isEmpty()) {
for (TreeNode childNode : node.getChildren()) {
childNodeList.addAll(getChildNodeList(childNode));
childNodeList.addAll(node.getChildren());
return childNodeList;
// 根据子节点
ID
获取父节点
public static TreeNode getParentNode(TreeNode rootNode, String child
Id
) {
if (rootNode != null) {
if (rootNode.get
Id
().equals(child
Id
)) {
return null;
for (TreeNode childNode : rootNode.getChildren()) {
if (childNode.get
Id
().equals(child
Id
)) {
return rootNode;
TreeNode parentNode = getParentNode(childNode, child
Id
);
if (parentNode != null) {
return parentNode;
return null;
// 使用示例
List<TreeNode> nodeList = new ArrayList<>();
nodeList.add(new TreeNode("0", "0"));
nodeList.add(new TreeNode("1", "0"));
nodeList.add(new TreeNode("2", "1"));
nodeList.add(new TreeNode("3", "2"));
nodeList.add(new TreeNode("4", "2"));
TreeNode rootNode = buildTree(nodeList);
List<TreeNode> childNodeList = getChildNodeList(rootNode); // 获取所有子节点
TreeNode parentNode = getParentNode(rootNode, "4"); // 获取父节点