You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Lodash以纯函数式方式扁平化两层映射提取二级键

纯函数式实现Lodash对象扁平化

给定原始嵌套结构:

const original = { 
  'a' : { 'aa' : { b: 1, c: 2}},
  'b' : { 'bb' : { c: 3, d: 4}},
  'c' : { 'cc' : { c: 3, d: 4}}
};

要转换为目标扁平结构,这里提供几种无副作用的纯函数式实现:

方法1:_.reduce + _.assign

利用reduce遍历原始对象的所有值,通过assign将每个子对象合并到新的累加器中:

const flattened = _.reduce(original, (acc, currentObj) => {
  return _.assign({}, acc, currentObj);
}, {});

每次返回全新对象而非修改原累加器,完全符合纯函数无副作用的特性。

方法2:_.flatMap + _.fromPairs

先将每个子对象转换为键值对数组,再通过fromPairs组装成目标对象:

const flattened = _.fromPairs(
  _.flatMap(original, obj => Object.entries(obj))
);

flatMap将所有子对象的键值对展开为一维数组,fromPairs再把数组还原为对象结构,逻辑清晰且无外部状态修改。

方法3:_.transform

transform是Lodash专为对象/数组转换设计的工具,属于更简洁的reduce变种:

const flattened = _.transform(original, (acc, currentObj) => {
  _.assign(acc, currentObj);
}, {});

写法紧凑,所有状态变化都局限在转换过程内部,不会产生副作用。

以上三种方法都规避了原实现中修改外部变量的副作用,遵循纯函数式编程原则,同时代码更简洁易读。

内容的提问来源于stack exchange,提问作者Vlad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:10:31