数组转树结构
/*** @Event 数组转树结构* @description: pid: parentId* @author: mhf* @time: 2023-11-01 16:06:18**/
export function arrayToTree(list,callback = () => {},props = { id: 'id', pid: 'pid', children: 'children' }
) {function sortArr(a, b) {return a.orderNum - b.orderNum;}list.sort(sortArr);const tree = [];const map = {};const listLength = list.length;for (let i = 0; i < listLength; i++) {const node = list[i];const nodeId = node[props.id];map[nodeId] = node;callback(node);}for (let i = 0; i < listLength; i++) {const node = list[i];const nodePid = node[props.pid];const parentNode = map[nodePid];if (parentNode) {parentNode[props.children] = parentNode[props.children] || [];parentNode[props.children].push(node);} else {tree.push(node);}}return tree;
}
知道树的某一个对象的id,想要获取此id对应的整个对象
findItemById(id, data, tagId="id", tagChildren="children") {for (let i = 0; i < data.length; i++) {if (data[i][tagId] === id) {return data[i]} else if (data[i][tagChildren]) {const result = this.findItemById(id, data[i][tagChildren]);if (result) {return result;}}}return null;},this.findItemById(10, this.treeData)
知道树的某一个对象的id,获取该对象的父节点的id
findParentIdById(id, data, parentIds = [], tagId="id", tagChildren="children") {for (let i = 0; i < data.length; i++) {if (data[i][tagId] === id) {return parentIds} else if (data[i][tagChildren]) {const result = this.findParentIdById(id, data[i][tagChildren], [...parentIds, data[i][tagId]])if (result) {return result}}}return null},this.findParentIdById(10, this.treeData)
知道id获取id所在的对象在整个树形数组中的位置
findIndexById(data, id, parentIndex) {for (var i = 0; i < data.length; i++) {var node = data[i];if (node.id === id) {return parentIndex ? parentIndex.concat(i) : [i];}if (node.children) {var index = this.findIndexById(node.children,id,parentIndex ? parentIndex.concat(i, "children") : [i, "children"]);if (index) {return index;}}}return null;},