我有如下数据结构:
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);
答案 0 :(得分:1)
function getElem(obj, arr) {
arr = arr || [];
if (obj.name) {
arr.push(obj.name);
}
if (obj.parent) {
return (getElem(obj.parent, arr));
}
else {
return (arr);
}
}
答案 1 :(得分:1)
假设您的数据结构如下所示
var obj = {
name: 'abc',
parent: {
name: 'def',
parent: {
name: 'ghi',
parent: {
name: 'jkl'
}
}
}
};
循环函数,递归遍历" parent"通过分配" parent"密钥在obj中的值,当密钥" parent"不可用......
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));
答案 2 :(得分:0)
我认为你不需要递归。
function getElem(obj) {
var names = [obj.name];
while (obj.parent) {
obj = obj.parent;
names.push(obj.name);
}
return names;
}