我必须创建一个javascript函数来对对象进行递归搜索,并获取给定ID的标签名称。
我尝试使用以下代码,但它会为任何ID返回undefined
。请帮我解决这个问题。
function GetLabel(data, Id) {
var i,
currentChild,
result;
if (Id == data.Id) {
return data['Label'];
} else {
for (field in data) {
if (typeof(data[field]) == "object") {
result = GetLabel(data[field], Id);
if (result != "") return result;
}
if (data[field] == Id) {
result = data['Label'];
return result;
}
}
}
}
答案 0 :(得分:0)
此答案基于此问题的数据结构:JSON Schema for tree structure
这个提议使用一个函数进行递归调用和一些更改,基本上是child
的迭代,它是一个数组而不是一个对象,可能应该是。
检查child
是否为数组后,如果找到所需的id
,Array#some
会有助于迭代并停止。
我建议使用通用样式指南来命名约定,并用小写字母写出所有属性,以及不能用作构造函数的函数。
function getLabel(data, id) {
var result;
if (id === data.id) {
return data.label;
}
Array.isArray(data.child) && data.child.some(function (a) {
result = getLabel(a, id);
if (result) {
return true;
}
});
return result;
}
var tree = { id: 1, label: "A", child: [{ id: 2, label: "B", child: [{ id: 5, label: "E" }, { id: 6, label: "F" }, { id: 7, label: "G" }] }, { id: 3, label: "C" }, { id: 4, label: "D", child: [{ id: 8, label: "H" }, { id: 9, label: "I" }] }] },
i;
for (i = 1; i < 10; i++) {
document.write(getLabel(tree, i) + '<br>');
}