一.關於數組的扁平化
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中的內容,也能讓父節點進行提交