繁体   English   中英

JSON 值与相同键的连接文本并保存在 javascript object

[英]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);

注意:尽可能使用mapreduceforEach方法。

这是我的看法。

语言和词汇是自动检测的,您可以添加更多内容而无需更改代码中的任何内容。

// 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.

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