如何避免嵌套使用_.each函数提取嵌套对象中的字段数据?
替代嵌套_.each提取字段的优雅方案
嘿,我完全懂你不想写多层嵌套_.each的心情——那种层层缩进的回调不仅看着杂乱,后续维护也容易头疼。针对你要从嵌套结构里提取所有fields对象的需求,这里有几个更简洁的替代方案:
方案1:Lodash _.flatMap 链式调用
flatMap的核心作用就是先映射再扁平化数组,刚好能帮你跳过嵌套的循环。你可以连续调用两次flatMap,先把外层的sections展开,再展开每个sections里的fields:
const result = _.flatMap(data, elt => _.flatMap(elt.sections, sec => sec.fields));
这样一行代码就能直接得到你想要的数组,完全不需要嵌套的回调函数。
方案2:原生JS Array.flatMap(无需Lodash)
如果你的运行环境支持ES2019及以上,甚至不用依赖Lodash,原生数组的flatMap就能搞定:
const result = data.flatMap(elt => elt.sections.flatMap(sec => sec.fields));
原生方法更轻量化,代码同样简洁易懂。
方案3:Lodash 链式调用(更简洁的写法)
如果你习惯用Lodash的链式语法,还可以这么写,可读性更强:
const result = _.chain(data) .flatMap('sections') // 直接传属性名,自动提取对应数组 .flatMap('fields') .value();
这种链式调用把每一步操作拆分出来,逻辑清晰,一眼就能看出是先处理sections再处理fields。
这些方案都能帮你避免嵌套_.each的繁琐,代码更简洁、易维护,而且最终结果完全符合你想要的格式~
内容的提问来源于stack exchange,提问作者Greg-A
相关产品推荐
相关产品推荐

