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

如何高效将指定JSON转换为按语言分组的目标格式?

JSON格式转换高效实现方案

我正尝试将如下JSON文件转换为指定的目标格式,但目前的实现思路不够高效,希望获取简便的解决方法。

原始JSON数据

[
 {
    "nid": "61629",
    "title": "K02 - Kiosk Slider - EN",
    "itemsSlider": [
      {
        "nid": "61626",
        "status": "1",
        "titleNode": "01Additional Suitcase - EN",
        "language": "en_US"
      },
      {
        "nid": "61626",
        "status": "1",
        "titleNode": "01Additional Suitcase - EN",
        "language": "en_US"
      }
    ]
  },
  {
    "nid": "61629",
    "title": "K02 - Kiosk Slider - EN",
    "itemsSlider": [
      {
        "nid": "61626",
        "status": "1",
        "titleNode": "01Additional Suitcase - EN",
        "language": "es_MX"
      },
      {
        "nid": "61626",
        "status": "1",
        "titleNode": "01Additional Suitcase - EN",
        "language": "es_MX"
      }
    ]
  },
  {
    "nid": "61629",
    "title": "K02 - Kiosk Slider - EN",
    "itemsSlider": [
      {
        "nid": "61626",
        "status": "1",
        "titleNode": "01Additional Suitcase - EN",
        "language": "fr_FR"
      },
      {
        "nid": "61626",
        "status": "1",
        "titleNode": "01Additional Suitcase - EN",
        "language": "fr_FR"
      }
    ]
  },
  {
    "nid": "61629",
    "title": "K02 - Kiosk Slider - Mix",
    "itemsSlider": [
      {
        "nid": "61626",
        "status": "1",
        "titleNode": "01Additional Suitcase - EN",
        "language": "es_MX"
      },
      {
        "nid": "61626",
        "status": "1",
        "titleNode": "01Additional Suitcase - EN",
        "language": "en_US"
      }
    ]
  }
]

期望的目标JSON格式

{
  "es_MX": [
    {
      "nid": "61626",
      "status": "1",
      "titleNode": "01Additional Suitcase - EN",
      "language": "es_MX"
    },
    {
      "nid": "61626",
      "status": "1",
      "titleNode": "01Additional Suitcase - EN",
      "language": "es_MX"
    }
  ],
  "fr_FR": [
    {
      "nid": "61626",
      "status": "1",
      "titleNode": "01Additional Suitcase - EN",
      "language": "fr_FR"
    },
    {
      "nid": "61626",
      "status": "1",
      "titleNode": "01Additional Suitcase - EN",
      "language": "fr_FR"
    }
  ]
}

高效实现方案

可以用JavaScript的Array.reduce方法一步完成聚合和过滤,逻辑清晰且高效:

const originalData = /* 你的原始JSON数据 */;

const result = originalData.reduce((acc, item) => {
  // 遍历当前项的itemsSlider数组
  item.itemsSlider.forEach(sliderItem => {
    const lang = sliderItem.language;
    // 过滤掉en_US,只保留目标语言
    if (lang !== 'en_US') {
      // 如果当前语言还没在结果中,初始化数组
      if (!acc[lang]) {
        acc[lang] = [];
      }
      acc[lang].push(sliderItem);
    }
  });
  return acc;
}, {});

console.log(JSON.stringify(result, null, 2));

逻辑说明

  1. 用reduce初始化一个空对象作为结果容器
  2. 遍历原始数组中的每一项,再遍历其内部的itemsSlider数组
  3. 跳过en_US的条目,将其他语言的条目按语言分类存入结果对象
  4. 最终得到按语言分组的目标格式

这个方法只需要一次遍历就能完成所有操作,时间复杂度为O(n)(n是所有itemsSlider条目的总数),属于高效的实现方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:22:50