js树结构常用递归函数【平行数组转换为tree、新增层级、处理空子级】

/**
 * 递归将平行数组转换为tree
 * @param {Array} list 需要转换的数组
 * @param {any} parId 默认传0 从第一层开始循环
 * @param {String} parentKey父ID KEY
 */
function createTree(list, parent = '0', parentKey='parentid') {
    const tree = [];
    list.map((item)=>{
        if(item[parentKey] === parent ) {
            // 递归寻找
            item.children = createTree(list, item.id);
            tree.push(item);
        }
    });
    return tree;
}
/**
 * 递归新增层级
 * @param {Array} list 需要处理的数组
 * @param {String} pid 层级键名
 * @param {String} children 子级名称
 */
function addHierarchy (list, pid= 'pid', children = 'children') {
    if (!Array.isArray(arr)) return []
    const recursion = (arr, index = 0) => {
        index++
        return arr.map(item => {
            item[pid] = index
            if (item[children] && item[children].length) recursion(item[children], index)
            return item
        })
    }
    return recursion(list)
}
/**
 * 递归处理空子级
 * @param {Array} list 需要处理的数组
 * @param {String} children 子级名称
 */
function delNullChand(list, children='children') {
  function recursion(arr) {
    arr.forEach(item => {
      if (!item[children].length) {
        item[children]= null
      } else {
        recursion(item[children])
      }
    })
    return arr
  }
  return recursion(list)
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值