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

如何用JavaScript ES6优雅反转任意深度的JSON对象结构?

优雅的ES6实现方案

我理解你想要把嵌套的多语言JSON结构(语言标识在最内层)转换为以语言为顶级键的结构,这里给你一个简洁优雅的ES6实现,核心分为两步:收集所有语言键值对的完整路径,再反向构建目标对象。

实现代码

// 递归遍历原对象,收集每个语言值对应的路径和语言键
function collectPaths(obj, currentPath = []) {
  let paths = [];
  for (const [key, value] of Object.entries(obj)) {
    if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
      // 递归处理嵌套对象,追加当前键到路径
      paths.push(...collectPaths(value, [...currentPath, key]));
    } else {
      // 遇到具体值时,记录语言键、父路径和值
      paths.push({ lang: key, parentPath: currentPath, value });
    }
  }
  return paths;
}

// 根据收集的路径构建目标对象
function invertMultilingualObj(obj) {
  const result = {};
  const paths = collectPaths(obj);
  
  for (const { lang, parentPath, value } of paths) {
    // 确保当前语言的顶级对象存在
    if (!result[lang]) {
      result[lang] = {};
    }
    
    let currentNode = result[lang];
    // 遍历父路径的前n-1个键,逐层创建嵌套对象
    for (let i = 0; i < parentPath.length - 1; i++) {
      const key = parentPath[i];
      if (!currentNode[key]) {
        currentNode[key] = {};
      }
      currentNode = currentNode[key];
    }
    
    // 将值赋值到路径的最后一个节点
    const finalKey = parentPath[parentPath.length - 1];
    currentNode[finalKey] = value;
  }
  
  return result;
}

测试示例

const a = { 
  "cookie": { 
    "CookieMessage": { "DE": "Nachricht", "EN": "Message" },
    "CookieSorte": { "DE": "Keks", "EN": "Coook" } 
  } 
};

console.log(invertMultilingualObj(a));

运行结果:

{
  DE: {
    cookie: {
      CookieMessage: "Nachricht",
      CookieSorte: "Keks"
    }
  },
  EN: {
    cookie: {
      CookieMessage: "Message",
      CookieSorte: "Coook"
    }
  }
}

代码逻辑说明

  1. collectPaths 函数:

    • 递归遍历输入对象的每一层,遇到嵌套对象时继续深入,同时记录当前的路径数组
    • 当遇到具体的字符串值时,将该值对应的语言标识、父级路径和值本身存入结果数组,为后续构建目标结构做准备
  2. invertMultilingualObj 函数:

    • 初始化空的结果对象,先调用collectPaths拿到所有路径信息
    • 遍历每条路径信息,为对应的语言标识创建顶级对象(如果不存在)
    • 沿着父路径逐层创建嵌套对象,最终将值赋值到对应的层级位置

这个实现充分利用了ES6的Object.entries、扩展运算符等特性,代码简洁易读,同时支持任意深度的嵌套结构,完美匹配你想要的转换需求。

内容的提问来源于stack exchange,提问作者Marco B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:06:24