如何高效将指定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));
逻辑说明
- 用
reduce初始化一个空对象作为结果容器 - 遍历原始数组中的每一项,再遍历其内部的
itemsSlider数组 - 跳过
en_US的条目,将其他语言的条目按语言分类存入结果对象 - 最终得到按语言分组的目标格式
这个方法只需要一次遍历就能完成所有操作,时间复杂度为O(n)(n是所有itemsSlider条目的总数),属于高效的实现方式。
内容的提问来源于stack exchange,提问作者dany952
相关产品推荐
相关产品推荐

