鍍金池/ 問答/HTML/ 遞歸處理后端傳來的數(shù)據(jù),處理成能使用的vue路由格式

遞歸處理后端傳來的數(shù)據(jù),處理成能使用的vue路由格式

感謝各位大神的解答,問題已經(jīng)解決,謝謝你們
var rr = [

    {"pid":0,"id":3,"name":"最外層3"},
    {"pid":0,"id":4,"name":"最外層4"},
    {"pid":4,"id":5,"name":"最外層-4"},
    {"pid":5,"id":6,"name":"最外層-4-1"},
    {"pid":0,"id":7,"name":"最外層7"},
    {"pid":7,"id":8,"name":"最外層-7"},
    {"pid":0,"id":9,"name":"最外層9"},
    {"pid":9,"id":10,"name":"最外層9-1"},
    {"pid":9,"id":11,"name":"最外層9-2"},
    {"pid":11,"id":12,"name":"最外層9-2-1"}

];

求大神幫忙能用遞歸把以上格式的數(shù)據(jù)處理成vue路由能使用的格式.... 以上數(shù)據(jù)里,pid為0代表一級路由,pid如果和pid為0的id相等的話代表二級路由... 以此類推...

回答
編輯回答
鐧簞噯

建議提付費(fèi)問題

2017年2月1日 07:45
編輯回答
尕筱澄

突然想起之前搞的一個東西

clipboard.png

clipboard.png

clipboard.png

var rr = [
    {"pid":0,"id":3,"name":"最外層3"},
    {"pid":0,"id":4,"name":"最外層4"},
    {"pid":4,"id":5,"name":"最外層-4"},
    {"pid":5,"id":6,"name":"最外層-4-1"},
    {"pid":0,"id":7,"name":"最外層7"},
    {"pid":7,"id":8,"name":"最外層-7"},
    {"pid":0,"id":9,"name":"最外層9"},
    {"pid":9,"id":10,"name":"最外層9-1"},
    {"pid":9,"id":11,"name":"最外層9-2"},
    {"pid":11,"id":12,"name":"最外層9-2-1"}
];
((arr)=>{
    arr = JSON.parse(JSON.stringify(arr)).sort((n,m)=>n.pid-m.pid);
    var _objHash = new Map();
    _objHash.set(0,{});
    arr.forEach(v=>{
        _objHash.set(v.id,v);
        var _temp = _objHash.get(v.pid)
        if(_temp.children){
            _temp.children.push(v)
        }else{
            _temp.children = [v]
        }
    });
    return _objHash.get(0)
    
})(rr);

clipboard.png


2018年9月7日10:01:30 正好有個朋友問我,重新寫了一個。
想法就是通過引用,直接鏈起來

r = [
    {"pid":0,"id":3,"name":"最外層3"},
    {"pid":0,"id":4,"name":"最外層4"},
    {"pid":4,"id":5,"name":"最外層-4"},
    {"pid":5,"id":6,"name":"最外層-4-1"},
    {"pid":0,"id":7,"name":"最外層7"},
    {"pid":7,"id":8,"name":"最外層-7"},
    {"pid":0,"id":9,"name":"最外層9"},
    {"pid":9,"id":10,"name":"最外層9-1"},
    {"pid":9,"id":11,"name":"最外層9-2"},
    {"pid":11,"id":12,"name":"最外層9-2-1"}
]
var _obj = {0:{}};
r.forEach(v=>{
    _obj[v.id] = v;
    if(!_obj[v.pid].children) _obj[v.pid].children = []
    _obj[v.pid].children.push(v)
})
console.log(_obj,_obj[0])

clipboard.png

2018年7月14日 07:31
編輯回答
別逞強(qiáng)

首先你要給你獲取到的數(shù)據(jù)都增加一個child:[]或者children:[]屬性吧,方法我給你了,然后你把數(shù)據(jù)丟進(jìn)去就行了,

// 遍歷出樹結(jié)構(gòu)json
function getVal(data, ppKey) {
  let temp = ppKey ? data[ppKey] : data
  for (let key in temp) {
    if (!(temp[key] instanceof Object) && key === 'id') {
      data.forEach(function (item) {
        if (item.pId === temp.id) {
          temp.children.push(item)
        }
      })
    }
    if (temp[key] instanceof Object || temp[key] instanceof Array) {
      getVal(temp, key)
    }
  }
}
// 去除多余的數(shù)據(jù)
function forSp(data) {
  data.forEach(function (item, index) {
    // 這里if條件 假如 一級路由的pid全都是0就以此為標(biāo)識
    if (item.pId != 0) {
      data.splice(index, 1)
      forSp(data)
    }
  })
}
2018年8月9日 10:56
編輯回答
離人歸
    var map = {};
    rr.forEach(function (item) {
        map[item.id] = item;
    });
    var newData = [];
    rr.forEach(function (item) {
        var parent = map[item.pid]; // 根據(jù)當(dāng)前遍歷對象的pid,去map對象中找到對應(yīng)索引的id
        if (parent) {
            // 如果找到索引,那么說明此項(xiàng)不在頂級當(dāng)中,那么需要把此項(xiàng)添加到,他對應(yīng)的父級中
            (parent.children || (parent.children = [])).push(item);
        } else {
            //如果沒有在map中找到對應(yīng)的索引ID,那么直接把當(dāng)前的item添加到newData結(jié)果集中作為頂級
            newData.push(item);
        }
    });
2017年5月9日 23:21
編輯回答
殘淚
let newArr = []
for (let i = 0; i < arr.length; i++) {
  let flagId = arr[i].id
  for (let j = 0; j < arr.length; j++) {
    const elJ = arr[j]
    if (elJ.pid === flagId) {
      (arr[i].children = []).push(elJ)
    }
  }
  arr[i].pid === 0 && newArr.push(arr[i])
}
console.log(newArr)

是這么玩?

clipboard.png

2017年8月15日 23:34