首頁  >  文章  >  web前端  >  如何使用層次結構展平嵌套物件的屬性清單?

如何使用層次結構展平嵌套物件的屬性清單?

Susan Sarandon
Susan Sarandon原創
2024-10-20 14:30:02800瀏覽

How to Flatten a Nested Object's Property List with Hierarchy?

遞歸循環物件來建立屬性清單

問題:
從複雜物件建立屬性鍵的扁平清單具有多個嵌套級別,同時保持層次結構。

底層資料結構:
給定物件具有具有不同層級屬性的分層結構。

預期的輸出:
反映層次結構的屬性鍵列表。

初始方法:
提供了一個基本的遞歸函數 iterate 來循環遍歷物件並列印屬性鍵。但是,它不維護層次結構。

解決方案:
為了考慮層次結構,引入了一個堆疊變數來儲存物件中的當前路徑。當遞歸函數遍歷物件時,它將目前屬性追加到堆疊中。當遇到原始屬性時,它會與連接的堆疊一起列印,表示該屬性的完整路徑。

修訂的代碼:

<code class="js">function iterate(obj, stack) {
  for (var property in obj) {
    if (obj.hasOwnProperty(property)) {
      if (typeof obj[property] === "object") {
        iterate(obj[property], stack + "." + property);
      } else {
        console.log(stack + "." + property);
        $('#output').append($('<div>').text(stack + "." + property));
      }
    }
  }
}

iterate(object, "");</code>

更新的解決方案:
引用答案中的更新解決方案提供了更清晰的實現,使用映射和歸約函數的組合來遞歸遍歷物件並建立屬性鍵的扁平列表。

<code class="js">Object.keys(object).map(key => createPath(object, key, "")).reduce((a, b) => a.concat(b))</code>

函數說明:

  • createPath: 遞歸建構從根物件到目前屬性的屬性路徑。
  • reduce: 將所有屬性的屬性路徑數組合併到一個扁平數組中。

以上是如何使用層次結構展平嵌套物件的屬性清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn