亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用JavaScript怎么將線性數據轉換為樹形數據

發布時間:2021-03-01 16:18:00 來源:億速云 閱讀:175 作者:戴恩恩 欄目:web開發

這篇文章主要介紹了使用JavaScript怎么將線性數據轉換為樹形數據,億速云小編覺得不錯,現在分享給大家,也給大家做個參考,一起跟隨億速云小編來看看吧!

Java是什么

Java是一門面向對象編程語言,可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序。

數據結構

下面是我們轉換前的數據:

[
  {
    "id":1,
    "parent_id":0,
    "name":"四川省"
  },
  {
    "id":2,
    "parent_id":0,
    "name":"廣東省"
  },
  {
    "id":3,
    "parent_id":0,
    "name":"江西省"
  },
  {
    "id":5,
    "parent_id":1,
    "name":"成都市"
  },
  {
    "id":6,
    "parent_id":5,
    "name":"錦江區"
  },
  {
    "id":7,
    "parent_id":6,
    "name":"九眼橋"
  },
  {
    "id":8,
    "parent_id":6,
    "name":"蘭桂坊"
  },
  {
    "id":9,
    "parent_id":2,
    "name":"東莞市"
  },
  {
    "id":10,
    "parent_id":9,
    "name":"長安鎮"
  },
  {
    "id":11,
    "parent_id":3,
    "name":"南昌市"
  }
]

我們轉換后的結果是:

[
  {
    "id":1,
    "parent_id":0,
    "name":"四川省",
    "children":[
      {
        "id":5,
        "parent_id":1,
        "name":"成都市",
        "children":[
          {
            "id":6,
            "parent_id":5,
            "name":"錦江區",
            "children":[
              {
                "id":7,
                "parent_id":6,
                "name":"九眼橋"
              },
              {
                "id":8,
                "parent_id":6,
                "name":"蘭桂坊"
              }
            ]
          }
        ]
      }
    ]
  },
  {
    "id":2,
    "parent_id":0,
    "name":"廣東省",
    "children":[
      {
        "id":9,
        "parent_id":2,
        "name":"東莞市",
        "children":[
          {
            "id":10,
            "parent_id":9,
            "name":"長安鎮"
          }
        ]
      }
    ]
  },
  {
    "id":3,
    "parent_id":0,
    "name":"江西省",
    "children":[
      {
        "id":11,
        "parent_id":3,
        "name":"南昌市"
      }
    ]
  }
]

實現代碼

let array = [
  {
    id: 1,
    parent_id: 0,
    name: "四川省"
  },
  {
    id: 2,
    parent_id: 0,
    name: "廣東省"
  },
  {
    id: 3,
    parent_id: 0,
    name: "江西省"
  },
  {
    id: 5,
    parent_id: 1,
    name: "成都市"
  },
  {
    id: 6,
    parent_id: 5,
    name: "錦江區"
  },
  {
    id: 7,
    parent_id: 6,
    name: "九眼橋"
  },
  {
    id: 8,
    parent_id: 6,
    name: "蘭桂坊"
  },
  {
    id: 9,
    parent_id: 2,
    name: "東莞市"
  },
  {
    id: 10,
    parent_id: 9,
    name: "長安鎮"
  },
  {
    id: 11,
    parent_id: 3,
    name: "南昌市"
  }
]

function listToTree(list) {
  let map = {};
  list.forEach(item => {
    if (! map[item.id]) {
      map[item.id] = item;
    }
  });

  list.forEach(item => {
    if (item.parent_id !== 0) {
      map[item.parent_id].children ? map[item.parent_id].children.push(item) : map[item.parent_id].children = [item];
    }
  });
  
  return list.filter(item => {
    if (item.parent_id === 0) {
      return item;
    }
  })
}
console.log(listToTree(array));

分析

這段代碼的核心就在 listToTree 方法中,這個方法分為了三個部分:

第一部分

第一部分先將數組中的所有元素都復制到 map 中(注意:這里是引用復制哦,這個細節很重要)。

第二部分

執行第二次遍歷前的 map:

// map
{
 ...,
 "3":{
    "id":3,
    "parent_id":0,
    "name":"江西省"
  },
  ...
}

然后這個時候遍歷 parent_id 不等于 0 的元素:

[
 ...,
 {
 id: 11,
 parent_id: 3,
 name: "南昌市"
 },
  ...
]

然后發現南昌市有 parent_id,我們再給 map[item.parent_id] 設置子元素,通過南昌市的 parent_id 可以推導出:

map["3"].children ? map["3"].children.push(item) : map[3].children = [item];

上面的代碼判斷了是否存在 children,如果不存在則直接給它賦值,否則將值 push 到 children 中。

執行完第二步后,我們已經把子節點添加到了它的父節點上,但是我們并沒有刪除掉之前的子節點。所以第三部就是對數據進行過濾,只要父節點即可。

使用JavaScript怎么將線性數據轉換為樹形數據

以上就是億速云小編為大家收集整理的使用JavaScript怎么將線性數據轉換為樹形數據,如何覺得億速云網站的內容還不錯,歡迎將億速云網站推薦給身邊好友。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

铜陵市| 德安县| 双辽市| 会东县| 南溪县| 绵竹市| 灌阳县| 三门县| 恭城| 綦江县| 旌德县| 彭水| 永新县| 买车| 琼海市| 福贡县| 平泉县| 杨浦区| 望城县| 若尔盖县| 北辰区| 南汇区| 南平市| 襄樊市| 苍梧县| 邵东县| 浦城县| 昌邑市| 鄱阳县| 深州市| 和静县| 黔西县| 麻江县| 文成县| 锡林郭勒盟| 郸城县| 井陉县| 重庆市| 武宣县| 开鲁县| 栾川县|