[英]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.