如何提取嵌套JSON的特定值,将所有items汇总为扁平数组?
实现方案
直接用flatMap结合递归即可,代码简洁且符合你要的用高阶函数的要求:
const parse = (node) => { // 提取当前节点的items,不存在则返回空数组 const currentItems = node.items ?? [] // 收集所有子节点,兼容你示例中同时存在的children数组、单个child两种格式 const allChildren = [ ...(node.children ?? []), ...(node.child ? [node.child] : []) ] // 递归处理所有子节点,合并成一维数组返回 return [...currentItems, ...allChildren.flatMap(parse)] }
代码说明
- 用空值合并运算符
??处理items、children不存在的场景,省去冗余的if判断 flatMap本身是「遍历映射+自动扁平化一层」的组合,刚好匹配递归返回的数组结构,无需额外调用扁平化方法- 如果你实际业务结构里只有
children数组没有单个child属性,直接删掉收集child的那一行即可 - 如果需要兼容低版本运行环境,把
allChildren.flatMap(parse)替换为allChildren.map(parse).flat(Infinity),效果完全一致
测试效果
把你给出的JSON补全后调用parse(json),直接返回["l1","l2","l3","l4"],和你要求的目标结果完全匹配。
内容的提问来源于stack exchange,提问作者Phate
相关产品推荐
相关产品推荐

