目前网上处理json树性能比较好的方法
处理前:
处理后:
子找父
第一种使用递归的方式(数据多的情况下性能中等)
var treeData = [];
function toTreeData(data, pid) {
const result = [];
let temp = [];
for (var i = 0; i < data.length; i++) {
if (data[i].parentid === pid) {
result.push(data[i]);
temp = toTreeData(data, data[i].id);
if (temp.length > 0) {
data[i].children = temp;
}
}
}
// console.log(result);
treeData = result;
return result;
},
第一种调用方法
this.toTreeData(this.results,null);
第 二、三种调用方法
this.toTreeData(this.results);
第二种使用reduce的方式(数据多的情况下性能高等)
toTreeData(categoryList) {
//可以生成多级嵌套的树
let categoryTree = [];
let list = categoryList.reduce(function (prev, item) {
prev[item.parentid]
? prev[item.parentid].push(item)
: (prev[item.parentid] = [item]);
return prev;
}, {});
for (let key in list) {
list[key].forEach(function (item) {
item.children = list[item.id] ? list[item.id] : [];
});
}
categoryTree = list[0];
},
第三种使用Object.keys的方式(数据多的情况下性能比递归性能好一些)
toTreeData(categoryList) {
let newData = {};
categoryList.forEach((e) => {
//新建属性名
if (Object.keys(newData).indexOf("" + e.parentid) === -1) {
newData[e.parentid] = [];
}
//对应插入属性值
newData[e.parentid].push(e);
});
let list = newData;
for (let key in list) {
list[key].forEach(function (item) {
item.children = list[item.id] ? list[item.id] : [];
});
}
categoryTree = list[0];
},