[英]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);
}
}
假设您的数据结构如下所示
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.