算法合集

福尔摩斯对我笑 2019-07-05 23338 次 3689条

树形结构反向解析

现有json结构如下:

  var objs = {
      id: 1,
      name: "第一个分组",
      pid: 0,
      label: "第一个分组",
      children: [
        {
          id: 3,
          name: "第一个分组的子分组",
          pid: 1
        },
        {
          id: 4,
          name: "第一个分组的第二个子分组",
          pid: 1,
          children: [
            {
              id: 5,
              name: "第一个分组的第二个子分组的第一个子分组",
              pid: 4,

              children: [
                {
                  id: 6,
                  name: "第一个分组的第二个子分组的第一个子分组的第一个分组",
                  pid: 4
                }
              ]
            }
          ]
        }
      ]
    };
    

需要的格式


[    {
        "id":3,
        "name":"第一个分组的子分组"
    },    {
        "id":4,
        "name":"第一个分组的第二个子分组"
    },    {
        "id":5,
        "name":"第一个分组的第二个子分组的第一个子分组"
    },    {
        "id":6,
        "name":"第一个分组的第二个子分组的第一个子分组的第一个分组"
    },    {
        "id":1,
        "name":"第一个分组"
    }]
    

算法

function toTreeData(objs) {
  var temp = [];
  var forFn = function(arr) {
      for (var i = 0; i < arr.length; i++) {
        var item = arr[i];
        temp.push({
          id: item.id,
          name: item.name
        });

        //如果有子元素进入递归
        if (item.children) {
          forFn(item.children);
        }
      }
    };


  if (objs.children) {
    forFn(objs.children);
  }

  temp.push({
    id: objs.id,
    name: objs.name
  });

  return temp;
}


var treeData = toTreeData(objs);
console.log(treeData);   //结束

根据最后一个找到整个家族


familyTree(arr, pid) {
var temp = [];
var forFn = function(arr, pid) {
for (var i = 0; i < arr.length; i++) {
var item = arr[i];
if (item.id == pid) {
temp.push(item);
forFn(arr, item.pid);
}
}
};
forFn(arr, pid);
return temp;
}


找到某一父节点下的所有子节点

 sonsTree(arr, id) {
      var temp = [],
        lev = 0;
      var forFn = function(arr, id, lev) {
        for (var i = 0; i < arr.length; i++) {
          var item = arr[i];
          if (item.pid == id) {
            item.lev = lev;
            temp.push(item);
            forFn(arr, item.id, lev + 1);
          }
        }
      };
      forFn(arr, id, lev);
      return temp;
    }

将数据写成树结构

toTree(data) {
      // 删除 所有 children,以防止多次调用
      data.forEach(function(item) {
        delete item.children;
      });
 
      // 将数据存储为 以 id 为 KEY 的 map 索引数据列
      var map = {};
      data.forEach(function(item) {
        map[item.id] = item;
      });
      //        console.log(map);
 
      var val = [];
      data.forEach(function(item) {
        // 以当前遍历项,的pid,去map对象中找到索引的id
        var parent = map[item.pid];
 
        // 如果找到索引,那么说明此项不在顶级当中,那么需要把此项添加到,他对应的父级中
        if (parent) {
          (parent.children || (parent.children = [])).push(item);
        } else {
          //如果没有在map中找到对应的索引ID,那么直接把 当前的item添加到 val结果集中,作为顶级
          val.push(item);
        }
      });
      return val;
    },

根据ID找到最近的父级

  function findIndexArray(data, id, indexArray) {
        let arr = Array.from(indexArray);
        for (let i = 0, len = data.length; i < len; i++) {
          if (data[i].children) {
            arr = []; 
            arr.push(data[i].pid);
          }
          if (data[i].id === id) {
            return arr;
          }
          let children = data[i].children;
          if (children && children.length) {
            let result = findIndexArray(children, id, arr);
            if (result) return result;
          }
        }
        return false;
      }


 console.log(findIndexArray(data, 3, [])); 

标签: 无

非特殊说明,本博所有文章均为博主原创。

头像也是LOGO
未来博客 博主大人
到了这个年纪,不应该再彷徨!

发表评论



 


已有 3689 条评论 1


  1. Alexfew

    вагонка из дуба, вагонка из кедра купить, купить вагонку из дуба,
    вагонка из кедра, деревянные дома из лиственницы,финские дома из бруса,
    дома из лиственницы под ключ, деревянные дома из кедра, дом из лиственницы,
    дома из бруса кедра, дом из кедра под ключ, дом из кедра цена,
    купить дом из клееного бруса под ключ, дом из кедра под ключ цена,
    одноэтажные дома из клееного бруса, дом из клееного бруса цена,
    дом из клееного бруса под ключ цены, вагонка из лиственницы,
    бани из клееного бруса недорого, построить дом из клееного бруса,
    одноэтажные дома из бруса, деревянные дома из клееного бруса
    http://drevtorg.club/profiles/blogs/6382903:BlogPost:172849

    回复 2020年3月31日
  2. Amycycle 回复 2020年3月30日
  3. Evacycle 回复 2020年3月30日
  4. Janecycle 回复 2020年3月30日
  5. Georgeagors

    разработка интернет магазина на битрикс

    стоимость копирайтинга за 1000

    回复 2020年3月30日
  6. Richardvat

    unethost無限空間虛擬主機 技術分享部落格

    http://blog.unethost.com/

    回复 2020年3月30日
  7. WilliamComia

    【揚歌-教學麥克風直營店】官方線上購物網站─JM-180B有線麥克風擴音器│無線麥克風擴音器│揚歌小蜜蜂│專營教學麥克風及教學擴音器

    https://mic-shop.com/

    回复 2020年3月30日
  8. RogerInvak 回复 2020年3月29日
  9. Kiacycle 回复 2020年3月29日
  10. Evacycle 回复 2020年3月29日
  11. Miguelrar

    Game LIFE 遊戲情報 http://gamelife.tw/

    回复 2020年3月29日
  12. CyberXoxype

    Eskadron is among the most appreciated high-street manufacturers in the world that focuses on the creation of supreme quality equestrian clothing and equipment. This German concern was set by Pikeur trying to satisfy with the jockeys’ needs, have been looking for professional but also fashionable equestrian accessories. Thus, why is Eskadron therefore special and why their collections are therefore popular with riders?Eskadron Why do riders from all around the world love this new?
    Eskadron is tremendously popular among horseriding lovers for a dozen or more years now. This new products are distinguished by their own top quality attention to detail. Eskadron can also be valued for their unique practicality, elegance, innovativeness of their own projects, contemporary style and design, and also availability. The new offer has both professional ones and items for amateur riders. Thus, you can find basic design clothes, professional design, and assorted accessories necessary for the proper saddling of a horse. Eskadron offers saddle cloths, halters, rugs, bell boots for horses, boots, fly hats, drapes, but also hoodies, t-shirts, breeches, even reveal jackets. All products come from the European Union, which in addition verifies their own quality.Eskadron’s collections
    Eskadron has many selections. Some are seasonal, others are always available in their offer. The very popular collections of the brand are:
    Classic Sports – established twice per year, this line is composed only of horse equipment. Services and products out of this collection are extremely easy, in standard soft colors but at precisely the same time quite tasteful.
    Platinum Card – launches once annually for people who like traditional solutions. You will mostly find black and gray colors along with delicate image themes.
    Young Star – line for kiddies that begin their experience with horse riding. It’s basic horse riding accessories in bright colors and extraordinary patterns.
    Equestrian Fanatics – clothing line made for riders that like to stand out. Available jackets, hoodies, and backpacks successfully combine casual clothing with equestrianism.
    Vintage offer – Their constant offer of clothing, equipment, and accessories. It is possible to find services and products used for training and regular rides but additionally elegant reveal clothing.

    Eskadron is a brand used by cyclists from all around the globe. For the relaxation of safety and riding both yours and your horse’s, it might be worth purchasing high quality articles, which may permit one to fully appreciate this sport that is exceptional.

    回复 2020年3月29日
  13. Redirect

    Well Written.

    回复 2020年3月29日
  14. Homepage

    This blog writeup was helpful.

    回复 2020年3月29日
  15. Amycycle 回复 2020年3月29日
  16. Alfredtig

    日本片商合法授權 極道光碟屋 台中AV女優光碟店 日本片商合法授權 – AV女優光碟.名器專賣(未滿18歲禁止)

    http://avgood-store.com/

    回复 2020年3月28日
  17. Teocycle 回复 2020年3月28日
  18. chadtb16

    Hardcore Galleries with hot Hardcore photos
    http://porn.clipsxxx.bestsexyblog.com/?yazmin

    illegal porn thumbnails xxx lingerie teasing stripping porn through the flames porn tiawan porn tube porn videos of the past

    回复 2020年3月28日
  19. Janecycle 回复 2020年3月28日
  20. Amycycle 回复 2020年3月28日
  21. Amycycle 回复 2020年3月28日
  22. kem trị nám doctor queen

    This site really has all the info I wanted about this subject and didn’t know
    who to ask.

    回复 2020年3月28日
  23. John Deere Repair Manuals

    J’apprйcie cette photo mais j’en ai auparavant vu de semblable de meilleures qualifications;

    回复 2020年3月28日
  24. Janecycle 回复 2020年3月28日
  25. John Deere Repair Manuals

    Nice Website. You should think more about RSS Feeds as a traffic source. They bring me a nice bit of traffic

    回复 2020年3月28日
  26. Janecycle 回复 2020年3月28日
  27. Kiacycle 回复 2020年3月28日
  28. Amycycle 回复 2020年3月28日
  29. aviation schools in nj

    I don’t know whether it’s just me or if everyone else experiencing problems with your website. It appears like some of the written text on your posts are running off the screen. Can someone else please comment and let me know if this is happening to them as well? This could be a problem with my browser because I’ve had this happen previously. Thanks

    回复 2020年3月28日
  30. Wimcycle 回复 2020年3月28日
  31. Lisacycle 回复 2020年3月28日
  32. lewisgf16

    Sexy photo galleries, daily updated pics
    http://amieporn.instasexyblog.com/?taniya

    dirty porn ever blonde uk porn model gillian chung porn pics female masturbation free porn porn solo

    回复 2020年3月28日
  33. p6 aviation

    Hi there! Quick question that’s totally off topic. Do you know how to make your site mobile friendly? My website looks weird when browsing from my iphone 4. I’m trying to find a theme or plugin that might be able to correct this issue. If you have any recommendations, please share. Thanks!

    回复 2020年3月27日