美文网首页
递归展开数组对象,根据主键递归查找树形数据中对应的数据

递归展开数组对象,根据主键递归查找树形数据中对应的数据

作者: 海布里的冬季 | 来源:发表于2020-12-11 16:20 被阅读0次
    /**
     *
     * @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
    }
    

    相关文章

      网友评论

          本文标题:递归展开数组对象,根据主键递归查找树形数据中对应的数据

          本文链接:https://www.haomeiwen.com/subject/sygjgktx.html