[英]Recursive search function for Javascript object with arrays of nested objects
我必須創建一個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;
}
}
}
}
該答案基於以下問題的數據結構: 樹結構的JSON模式
該建議使用一個函數進行遞歸調用和一些更改,基本上是對child
的迭代進行的, child
的迭代是數組而不是可能的對象。
在檢查child
是否為數組之后, Array#some
有助於迭代並在找到所需id
停止。
我建議使用通用的樣式指南來命名約定,並用小寫字母寫所有屬性,以及不能用作構造函數的函數。
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>'); }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.