91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

使用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

巫溪县| 福泉市| 宜春市| 肥东县| 济源市| 兖州市| 吐鲁番市| 罗甸县| 那坡县| 黄石市| 和林格尔县| 搜索| 普定县| 肇源县| 武定县| 金坛市| 会东县| 定兴县| 台中县| 合江县| 鄂尔多斯市| 江孜县| 岢岚县| 长兴县| 酉阳| 临邑县| 上蔡县| 虞城县| 井陉县| 凌海市| 平和县| 公主岭市| 龙岩市| 金华市| 镇赉县| 丰城市| 望奎县| 迭部县| 花垣县| 阿拉善右旗| 武邑县|