antd的treeSelect组件的treeData
这个方法是转载的,但是出处忘记了,有看到的话联系下哈。
今天需要把后端给的一个对象数组快速排序为需要的treeData。然后去网上搜索了下,发现了一下这个简单的方法
let tree = cloneData.filter((father) => { //循环所有项
let branchArr = cloneData.filter((child) => {
return father._id === child.parentId //返回每一项的子级数组
});
if (branchArr.length > 0) {
father.children = branchArr; //如果存在子级,则给父级添加一个children属性,并赋值
}
return father.parentId === '-1'; //返回第一层
});
这个排序的原理其实很简单,核心是利用了数据污染。
let cloneData = JSON.parse(JSON.stringify(data)).map(v => ({
title: v.name,
value: v._id,
key: v._id,
parentId: v.parentId,
_id: v._id,
children: []
})) // 对源数据深度克隆
同时为了保证数据可以直接改造为treeData类型,所以我先进行了简单的深度克隆,然后使用map返回了一个新数组。
很简单吧!!!