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

如何将任意深度嵌套对象转换为结构一致的嵌套Map?

解决嵌套对象转嵌套Map的条目过多问题

你的代码出现条目过多的核心原因是:递归处理嵌套对象时,复用了同一个Map实例(把外层的m传给了递归调用),导致所有层级的键都被塞进了同一个Map里,最终结构混乱。

修正后的代码

const exampleInput = { a: 1, b: { c: 2, d: { e: 3 } } };
const expectedOutput = new Map([['a', 1], ['b', new Map([['c', 2], ['d', new Map([['e', 3]])]])]]);

const nestedObj2Map = (o) => {
  const map = new Map();
  for (const [k, v] of Object.entries(o)) {
    // 仅处理非数组的普通对象,若需处理数组可单独调整逻辑
    if (typeof v === 'object' && v !== null && !Array.isArray(v)) {
      map.set(k, nestedObj2Map(v));
    } else {
      map.set(k, v);
    }
  }
  return map;
};

const result = nestedObj2Map(exampleInput);
console.log(result); // 结构与expectedOutput完全一致

关键修正点

  1. 移除了默认参数m = new Map(),改为每次处理对象时创建新的Map实例,确保每个层级的Map相互独立。
  2. 递归调用时不再传递外层Map,直接让子层级生成自己的嵌套Map,避免键的混杂。
  3. 增加!Array.isArray(v)判断(可选):如果你的场景不需要把数组转成Map,这个判断可以避免将数组误识别为普通对象处理;若需支持数组转Map,可移除该判断或单独编写数组处理逻辑。

运行修正后的代码,返回的Map结构会和预期完全匹配,每个嵌套层级都是独立的Map实例,不会出现多余条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 06:22:04