簡體   English   中英

如何遍歷數組

[英]How to traverse an array

我必須使用樹數組創建樹結構,但無法正確遍歷數組。 我使用以下代碼:

    function fnAppend(param) {
       var tree= [ {
                    "name": "A","children": [
                      {
                        "name": "A1","children": [
                          {
                            "name": "A2","children": []
                          },
                          {
                            "name": "A3","children": []
                          }
                        ]
                      },
                      {
                        "name": "B1","children": [
                          {
                            "name": "B2","children": []
                          }
                        ]
                      }
                    ]
                  },
                  {
                    "name": "B","children": []
                  },
                  {
                    "name": "C","children": [
                      {
                        "name": "C1","children": [
                          {
                            "name": "C2","children": []
                          }
                        ]
                      }
                    ]
                  }
                ];
       for(var i = 0; i < tree.length; i++){
          console.log("Mother : "+tree[i].name);
          var childArray = tree[i].children;
          for(var j = 0; j < childArray.length; j++){
             console.log("Child :"+childArray[j].name);
          }
      }
    }

一個簡單的遞歸方法將起作用。

function children(list){
   for(var i = 0; i < list.length; i++){
     var name = list[i].name;
     console.log(name);

     if(list[i].children != undefined){
        children(list[i].children);
     }
   }
}

它的作用是:循環傳遞數組的級別,然后檢查是否有任何對象具有子對象(如果有的話),它會自行調用並再次進行操作,直到找不到子對象為止,然后繼續下一個對象。

這是完整的JSFiddle

這是您需要遞歸函數的地方。

function traverse(arr) {
  for (const branch of arr) {
    console.log('Mother:', branch.name);


    if (Array.isArray(branch.children) && branch.children.length > 0) {
      console.log('Children:', branch.children.map(i => i.name).join(', '));
      traverse(branch.children);
    }
  }
}

traverse(tree);

您可以遞歸並移交父名稱。

 const iter = parent => ({ name, children }) => { console.log('parent', parent, 'name', name); if (children.length) children.forEach(iter(name)); }; var tree = [{ name: "A", children: [{ name: "A1", children: [{ name: "A2", children: [] }, { name: "A3", children: [] }] }, { name: "B1", children: [{ name: "B2", children: [] }] }] }, { name: "B", children: [] }, { name: "C", children: [{ name: "C1", children: [{ name: "C2", children: [] }] }] }]; tree.forEach(iter()); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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