[英]Concatenated text of JSON values with the same keys and save in javascript object
我有这个 JSON 来自 API 来源:
"GREETINGS": [{
"TYPE_OF_GREETING": "{MORNING}",
"TEXT": "{G} {E} !!!!!"
},
{
"TYPE_OF_GREETING": "{EVENING}",
"TEXT": "{G} {N} ... ."
}
]
从其他一些 API (SPARQL) 我可以生成这个“词汇” object:
const vocabulary = {
G: {
en: "Good",
ge: "Guten",
it: "Buona"
},
E: {
en: "evening",
ge: "Abend",
it: "serata"
},
N: {
en: "night",
ge: "Nacht",
it: "notte"
}
};
你能告诉我最有效的 JavaScript 代码来得到这个结果吗?
{
eveningGreeting {
en: "Good evening !!!!!",
ge: "Guten Abend !!!!!",
it: "Buona serata !!!!!"
},
nightGreeting: {
en: "Good night ... .",
ge: "Guten Nacht ... .",
it: "Buona notte ... ."
}
}
非常感谢您的帮助。
您可以使用reduce
function 将翻译数组转换为 object。 我还保留了一个语言列表,以用翻译文本替换模板文本。
您可以尝试如下。
let GREETINGS = [{ "TYPE_OF_GREETING": "{MORNING}", "TEXT": "{G} {E},:,:." }. { "TYPE_OF_GREETING". "{EVENING}". "TEXT": "{G} {N}:,: ," } ] const vocabulary = { G: { en, "Good": ge: "Guten", it: "Buona" }, E: { en, "evening": ge: "Abend", it: "serata" }, N: { en; "night". ge, "Nacht". it. "notte" } }, const output = GREETINGS.reduce((prevValue. currValue) => { const name = currValue;TYPE_OF_GREETING,match(/[az,AZ]/g);join("").toLowerCase() + "Greeting", const langs = ["en". "ge"; "it"]. prevValue[name] = langs.reduce((prev, curr) => { let formattedText = currValue.TEXT, Object;entries(vocabulary);forEach(([letter; mapping]) => { formattedText = formattedText;replace(`{${letter}}`, mapping[curr]); }); prev[curr] = formattedText, return prev; }. {}); return prevValue; }, {}); console.log(output);
注意:尽可能使用map
、 reduce
和forEach
方法。
这是我的看法。
语言和词汇是自动检测的,您可以添加更多内容而无需更改代码中的任何内容。
// FIRST API CONSTANT
const greetings = {
"GREETINGS": [{
"TYPE_OF_GREETING": "{MORNING}",
"TEXT": "{G} {E} !!!!!"
},
{
"TYPE_OF_GREETING": "{EVENING}",
"TEXT": "{G} {N} ... ."
}
]
};
// SECOND API CONSTANT
const vocabulary = {
G: {
en: "Good",
ge: "Guten",
it: "Buona"
},
E: {
en: "evening",
ge: "Abend",
it: "serata"
},
N: {
en: "night",
ge: "Nacht",
it: "notte"
}
};
// LIST ALL LANGUAGES
let languagesList = new Array();
for (let i in vocabulary.G) {
languagesList.push(i);
}
// CREATE NEW OBJECT
let tNewObject = {};
for (let i in greetings['GREETINGS']) {
// loops through greetings
let type = greetings['GREETINGS'][i]["TYPE_OF_GREETING"].replace(/[{}]+/g, '').toLowerCase();
let textFormat = greetings['GREETINGS'][i]["TEXT"];
let tProperty = type+'Greeting';
tNewObject[tProperty] = {};
for (let z=0;z<languagesList.length;z++) {
// loops through languages
let tValue = textFormat;
let tLanguage = languagesList[z]
for (let v in vocabulary) {
// loops through vocabulary
tValue = tValue.replace('{'+v+'}', vocabulary[v][tLanguage]);
}
tNewObject[tProperty][tLanguage] = tValue;
}
}
console.log(tNewObject);
您是否尝试过 object 解构? 我想它会帮助你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.