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

输入:

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
}
阅读 2.2k
2 个回答
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);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题