繁体   English   中英

使用递归函数从父节点获取数据

[英]Using recursive function to get data from parent nodes

我的数据结构如下:

obj
 name
 parent
   name
   parent
     name
     parent

我试图做一个递归函数来获取name元素,只要有一个父元素。 我想出了以下代码,但是它不起作用,因为它将结果转换为字符串(而不是对象)。 有人可以给我一些有关如何最好地实现这一目标的建议。 父元素的嵌套是变化的,不是固定的(即使在上面我仅指定了3层)。 范围是1到100。

我想要的结果

我的最终目标是从层次结构中的每个“父级”中提取所有“名称”元素(并将它们推入数组)。

function getElem(obj){
    var result = '';
    var parent = '.parent';
    var temp = '';

    if(!obj.parent){
        return obj.name
    }
    else {
        //structure is obj.parent.parent.parent...name
        temp += parent;
        result = obj + temp + '.name';
        console.log(result);
        getElem(result);
    }
}
getElem(e.data);    
function getElem(obj, arr) {
  arr = arr || [];
  if (obj.name) {
      arr.push(obj.name);
  }

  if (obj.parent) {
      return (getElem(obj.parent, arr));
  }
  else {
      return (arr);
  }
}

的jsfiddle

假设您的数据结构如下所示

    var obj = {
        name: 'abc',
        parent: {
            name: 'def',
            parent: {
                name: 'ghi',
                parent: {
                    name: 'jkl'
                }
            }
        }
    };

通过在obj中分配“父”键的值来递归遍历“父”键的循环功能,并在键“父”不可用时中断循环...

    function get_names(obj, key) {
        var names = [];
        if(key == "undefined") {
            key = "parent"; // default value of key
        }
        do {

            if(typeof obj === "undefined") {
                break; // breaks the loop when obj/parent is undefined
            }
            names.push(obj.name); // pushes all the elements named as 'name'

        } while(obj = obj.parent);

        return names;
    }

在控制台中记录阵列

    console.log(get_names(obj));

我认为您不需要递归。

function getElem(obj) {
    var names = [obj.name];
    while (obj.parent) {
        obj = obj.parent;
        names.push(obj.name);
    }
    return names;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM