/** * * @param {Object} * @param {Array} arr 数组对象 * @param {String} childrenKey 子数组的key * @param {Number=} expandLevel 可选 开展的层级 * @param {String=} levelKey 可选 树形构造中元素的层级字段 层级从0开始 当expandLevel有值时 levelKey为必须 * @param {Boolean=} noParents 返回开展数组时不蕴含根节点 当root为true时 level为必须 否则默认为1 * @example expandArrayObject({ arr, childrenKey[, level, root] }) * @description 递归开展数组对象 默认开展时蕴含父节点 */export function expandArrayObject({ arr, childrenKey, expandLevel, levelKey, noParents}) { const list = [] let currentLevel = 1 const _level = expandLevel || (noParents && 1) let parentCode = null const recursiveExpand = (arr, pCode) => { parentCode = pCode if (_level && currentLevel > _level) { return } Array.isArray(arr) && arr.forEach((item) => { currentLevel = item[levelKey] + 1 if (noParents && currentLevel < _level) { recursiveExpand(item[childrenKey]) } else { list.push(item) recursiveExpand(item[childrenKey]) } }) } recursiveExpand(arr, parentCode) return list}/** * * @param {Object} * @param arr 查找数据的元数组 * @param childrenKey 子数组的key * @param codeKey 主键key * @param code 须要找到的元素的主键值 * @description 依据主键递归查找树形数据中对应的数据 */export function getChildrenRecursive({ arr, childrenKey, codeKey, code }) { let result arr.forEach((item) => { if (item[codeKey] === code) { result = item } else { getChildrenRecursive({ arr: item[childrenKey], childrenKey, codeKey, code }) } }) return result}