簡體   English   中英

帶有嵌套對象數組的Javascript對象的遞歸搜索功能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM