问答

【编程进阶】算法 — 递归删除指定层级

作者:admin 2021-05-14 我要评论

输入: const arrs = [ { name: '广东', children: [ { name: '深圳', children: [ { name: '南山区', children: [] } ] }, { name: '广州', children: [ { name...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

输入:

const arrs = [
    {
        name: '广东',
        children: [
            {
                name: '深圳',
                children: [
                    {
                        name: '南山区',
                        children: []
                    }
                ]
            },
            {
                name: '广州',
                children: [
                    {
                        name: '白云区',
                        children: []
                    }
                ]
            }
        ]
    },
    {
        name: '上海',
        children: [
            {
                name: '浦东新区',
                children: []
            }
        ]
    },
    {
        name: '北京',
        children: [
            {
                name: '朝阳区',
                children: []
            }
        ]
    }
]

输出:

[
    {
        name: '广东',
        children: [
            {
                name: '深圳',
                children: []
            },
            {
                name: '广州',
                children: []
            }
        ]
    },
    {
        name: '上海',
        children: []
    },
    {
        name: '北京',
        children: []
    }
]

如上所示,删除了区的那一层,保留到市。

function removeLevel(arrs) {
    // todo
}
###
function removeLevel(arr) {
  function map(arr) {
        return isCity(arr) ? [] : arr.map(v => ({...v, children: map(v.children)}))
  }
  function isCity(arr) {
    return arr.length && arr[0].name.includes('区');
  }
  return map(arr)
}
###
function removeLevel(arrs, keep) {
     function innerRemove(arrs, level, depth = 0) {
        return depth >= level ? [] :
           arrs.map(item => ({...item, children: innerRemove(item.children, level, depth + 1) }));
     }
     return innerRemove(arrs, keep);
} 

// 保留 1 层
removeLevel(arrs, 1);

// 保留 2 层
removeLevel(arrs, 2);

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 请问下prometheus怎么进行自定义的按业

    请问下prometheus怎么进行自定义的按业

  • 节流函数为什么,点击无效,监听窗口大

    节流函数为什么,点击无效,监听窗口大

  • express访问静态资源失败

    express访问静态资源失败

  • IE 浏览器下 match 方法报错

    IE 浏览器下 match 方法报错

腾讯云代理商
海外云服务器