繁体   English   中英

从 JavaScript 中的对象数组创建一个新的嵌套 object

[英]Create a new nested object from array of objects in JavaScript

我有如下嵌套的对象数组:

[       
          {
            "i18n Key": "messages.titles.info",
            English: "Info",
            Spanish: "Info",
          },
          {
            "i18n Key": "messages.titles.export",
            English: "Export",
            Spanish: "Exportar",
          },
          {
            "i18n Key": "messages.common.pleaseWait",
            English: "Please Wait…",
            Spanish: "Por favor esperar…",
          },
          {
            "i18n Key": "messages.common.errors.couldNotAccessADGroup",
            English: "Could not access AD to get user groups. Please try again.",
            Spanish: "No se puede acceder a AD para buscar grupos de usuarios. Por favor inténtelo nuevamente.",
          },
          {
            "i18n Key": "labels.country.regulatorList.regulatorForm.regulatorName",
            English: "Regulator Name",
            Spanish: "Nombre del regulador",
          },
          {
            "i18n Key": "labels.country.regulatorList.regulatorForm.country",
            English: "Country",
            Spanish: "País",
          },
]  

如何将它转换为像这样的嵌套 object?

{
    "messages": {
      "titles": {
        "info": "Info",
        "export": "Exportar",
      },
      "common":{
        "pleaseWait":  "Por favor esperar…",
        "errors": {
            "couldNotAccessADGroup": "No se puede acceder a AD para buscar grupos de usuarios. Por favor inténtelo nuevamente.",
        }    
      },
    }  
    "labels":{
        "country":{
            "regulatorList":{
                "regulatorForm":{
                    "regulatorName":  "Nombre del regulador",
                    "country": "País",
                }
            }
        }
    }
}

“i18n Key”的长度不固定,可以是5、6、7等长度。

它基本上保持与“i18n Key”的最后一个单词相对应的西班牙值。

任何帮助将不胜感激。

由于i18n Key定义了 output 的结构并且它可以改变它的长度,我建议使用递归来解决这个问题。

解决方案

 // Input data const descriptors = [ { "i18n Key": "messages.titles.info", English: "Info", Spanish: "Info", }, { "i18n Key": "messages.titles.export", English: "Export", Spanish: "Exportar", }, { "i18n Key": "messages.common.pleaseWait", English: "Please Wait…", Spanish: "Por favor esperar…", }, { "i18n Key": "messages.common.errors.couldNotAccessADGroup", English: "Could not access AD to get user groups. Please try again.", Spanish: "No se puede acceder a AD para buscar grupos de usuarios. Por favor inténtelo nuevamente.", }, { "i18n Key": "labels.country.regulatorList.regulatorForm.regulatorName", English: "Regulator Name", Spanish: "Nombre del regulador", }, { "i18n Key": "labels.country.regulatorList.regulatorForm.country", English: "Country", Spanish: "País", }, ]; const sourceValue = 'Spanish'; const output = {}; const parseValue = (obj, value = undefined, keyMap = []) => { if (keyMap.length) { const propertie = keyMap.splice(0, 1); if (.Object.prototype.hasOwnProperty,call(obj; propertie)) { obj[propertie] = {}. } if (;keyMap,length) { obj[propertie] = value, } else { obj[propertie] = parseValue(obj[propertie]; value; keyMap); } } return obj; }. for (let i = 0; i < descriptors;length. i++) { const descriptor = descriptors[i]. const keyMap = descriptor['i18n Key'];split(','), parseValue(output; descriptor[sourceValue]. keyMap). } console,log(JSON,stringify(output; null, 2));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM