export function addArrayObjectNodeIterative(list,key, targetValue, updateData) { // 1. 初始化栈,将根数组放入 const stack = [...list]; while (stack.length > 0) { const node = stack.pop(); // 2. 检查当前节点 if (node?.[key] === targetValue) { console.log('执行了') let children = node?.children || [] children.push( { label:updateData, id:targetValue + `${children?.length+1}`, children:[] } ) // console.log('children',children) Object.assign(node, {...node,children}); return true; } // 3. 将子节点推入栈中(如果有) if (node.children && node.children.length) { stack.push(...node.children); } } return false; } export function updateArrayObjectNodeIterative(list,key, targetValue, updateData) { // 1. 初始化栈,将根数组放入 const stack = [...list]; while (stack.length > 0) { const node = stack.pop(); // 2. 检查当前节点 if (node?.[key] === targetValue) { console.log('执行了') Object.assign(node, {...node,label:updateData}); return true; } // 3. 将子节点推入栈中(如果有) if (node.children && node.children.length) { stack.push(...node.children); } } return false; } export function replaceArrayObjectNodeKeyVal(list,key, targetKey) { // 1. 初始化栈,将根数组放入 const stack = [...list]; while (stack.length > 0) { const node = stack.pop(); Object.assign(node, {...node,[key]:node?.[targetKey]}); // 3. 将子节点推入栈中(如果有) if (node.children && node.children.length) { stack.push(...node.children); } } return false; } // 会修改原数组 export function addNodeKeyValOfArrayObject(list,key,targetVal){ // 1. 初始化栈,将根数组放入 const stack = [...list]; while (stack.length > 0) { const node = stack.pop(); Object.assign(node, {...node,[key]:targetVal}); // 3. 将子节点推入栈中(如果有) if (node.children && node.children.length) { stack.push(...node.children); } } } export function removeNodeById(list, key,targetValue) { return list.filter(node => { // 1. 如果当前节点就是目标,直接过滤掉(返回 false) if (node?.[key] === targetValue) { return false; } // 2. 如果当前节点不是目标,但有子节点,则递归处理子节点 if (node.children && node.children.length) { node.children = removeNodeById(node.children,key, targetValue); } // 3. 保留当前节点 return true; }); } export function extractArrayObjectNode(list,key,matchKeysValue){ let finalResult:any[] = [] // 1. 初始化栈,将根数组放入 const stack = [...list]; while (stack.length > 0) { const node = stack.pop(); if(matchKeysValue.includes(node?.[key])){ finalResult.push(node) }else if(node?.children && node.children?.length){ let filterResult = extractArrayObjectNode(node?.children,key,matchKeysValue) if(filterResult?.length){ finalResult.push({ ...node, children:filterResult }) } } } return finalResult } export function extractBlurObjectNode(list,key,matchKeysValue){ let finalResult:any[] = [] // 1. 初始化栈,将根数组放入 const stack = [...list]; while (stack.length > 0) { const node = stack.pop(); if(new RegExp(matchKeysValue).test(node?.[key])){ finalResult.push(node) }else if(node?.children && node.children?.length){ let filterResult = extractBlurObjectNode(node?.children,key,matchKeysValue) if(filterResult?.length){ finalResult.push({ ...node, children:filterResult }) } } } return finalResult } export function extractArrayObjectLeafKey(list,key,extraKey?:any){ let aimKeys = [] const stack = [...list] while(stack.length > 0){ let node = stack.pop() if(node.children && node.children.length > 0){ stack.push(...(node.children)) }else{ if(extraKey){ let keysObj = {} extraKey.map(item=>{ keysObj[item] = node?.[item] }) let params = JSON.stringify({ [key]:node?.[key], ...keysObj, // [extraKey]:node?.[extraKey] }) aimKeys.push(params) }else{ aimKeys.push(node?.[key]) } } } // 需要执行去重 let result = [...(new Set(aimKeys))] if(extraKey){ return result?.map(item=>{ return JSON.parse(item || '{}') }) }else{ return result } } export const deepSort = (list, key='code', childrenKey = 'children')=>{ let sortList = list.sort((a,b)=>{ return a?.[key] - b?.[key] }) let finalList = sortList.map(item=>{ if(item.children?.length > 1){ let children = deepSort(item?.[childrenKey]) return { ...item, [childrenKey]:children } }else{ return item } }) return finalList }