真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

使用JavaScript怎么將線性數(shù)據(jù)轉(zhuǎn)換為樹形數(shù)據(jù)

這篇文章主要介紹了使用JavaScript怎么將線性數(shù)據(jù)轉(zhuǎn)換為樹形數(shù)據(jù),創(chuàng)新互聯(lián)小編覺得不錯(cuò),現(xiàn)在分享給大家,也給大家做個(gè)參考,一起跟隨創(chuàng)新互聯(lián)小編來看看吧!

創(chuàng)新互聯(lián)專注于西安網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供西安營銷型網(wǎng)站建設(shè),西安網(wǎng)站制作、西安網(wǎng)頁設(shè)計(jì)、西安網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造西安網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供西安網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

Java是什么

Java是一門面向?qū)ο缶幊陶Z言,可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序。

數(shù)據(jù)結(jié)構(gòu)

下面是我們轉(zhuǎn)換前的數(shù)據(jù):

[
  {
    "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":"錦江區(qū)"
  },
  {
    "id":7,
    "parent_id":6,
    "name":"九眼橋"
  },
  {
    "id":8,
    "parent_id":6,
    "name":"蘭桂坊"
  },
  {
    "id":9,
    "parent_id":2,
    "name":"東莞市"
  },
  {
    "id":10,
    "parent_id":9,
    "name":"長安鎮(zhèn)"
  },
  {
    "id":11,
    "parent_id":3,
    "name":"南昌市"
  }
]

我們轉(zhuǎn)換后的結(jié)果是:

[
  {
    "id":1,
    "parent_id":0,
    "name":"四川省",
    "children":[
      {
        "id":5,
        "parent_id":1,
        "name":"成都市",
        "children":[
          {
            "id":6,
            "parent_id":5,
            "name":"錦江區(qū)",
            "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":"長安鎮(zhèn)"
          }
        ]
      }
    ]
  },
  {
    "id":3,
    "parent_id":0,
    "name":"江西省",
    "children":[
      {
        "id":11,
        "parent_id":3,
        "name":"南昌市"
      }
    ]
  }
]

實(shí)現(xiàn)代碼

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: "錦江區(qū)"
  },
  {
    id: 7,
    parent_id: 6,
    name: "九眼橋"
  },
  {
    id: 8,
    parent_id: 6,
    name: "蘭桂坊"
  },
  {
    id: 9,
    parent_id: 2,
    name: "東莞市"
  },
  {
    id: 10,
    parent_id: 9,
    name: "長安鎮(zhèn)"
  },
  {
    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 方法中,這個(gè)方法分為了三個(gè)部分:

第一部分

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

第二部分

執(zhí)行第二次遍歷前的 map:

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

然后這個(gè)時(shí)候遍歷 parent_id 不等于 0 的元素:

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

然后發(fā)現(xiàn)南昌市有 parent_id,我們再給 map[item.parent_id] 設(shè)置子元素,通過南昌市的 parent_id 可以推導(dǎo)出:

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

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

執(zhí)行完第二步后,我們已經(jīng)把子節(jié)點(diǎn)添加到了它的父節(jié)點(diǎn)上,但是我們并沒有刪除掉之前的子節(jié)點(diǎn)。所以第三部就是對(duì)數(shù)據(jù)進(jìn)行過濾,只要父節(jié)點(diǎn)即可。

使用JavaScript怎么將線性數(shù)據(jù)轉(zhuǎn)換為樹形數(shù)據(jù)

以上就是創(chuàng)新互聯(lián)小編為大家收集整理的使用JavaScript怎么將線性數(shù)據(jù)轉(zhuǎn)換為樹形數(shù)據(jù),如何覺得創(chuàng)新互聯(lián)網(wǎng)站的內(nèi)容還不錯(cuò),歡迎將創(chuàng)新互聯(lián)網(wǎng)站推薦給身邊好友。


當(dāng)前文章:使用JavaScript怎么將線性數(shù)據(jù)轉(zhuǎn)換為樹形數(shù)據(jù)
URL網(wǎng)址:http://weahome.cn/article/jhiped.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部