一.关于数组的扁平化
export const flattenTree = (data, childKey = "children") => {
return data.reduce((arr, item) => {
if (item[childKey] && item[childKey].length > 0) {
return arr.concat([item], flattenTree(item[childKey]))
}
return arr.concat([item])
}, [])
}
补充,将扁平化的数组变成一个对象,以他的id为键(业务场景:角色权限)
const menuIds = data.data || [];
const treeData = flattenTree(this.treeData);
const treeObject = keyBy(treeData, "id");
//得到所有没有子节点的item
let newMenuIds = [];
menuIds.forEach(menuId => {
const menuItem = treeObject[menuId] || {};
if (menuItem.children && menuItem.children.length > 0) {
return;
}
newMenuIds.push(menuId);
});
//得到剩下的父节点
this.half = menuIds.filter(item => !newMenuIds.includes(item));
//注意将得到的剩下的父节点也传递到tree中,这样即使不修改tree中的内容,也能让父节点进行提交