我有一个看起来像这样的语言环境对象
{
hello.title: {
en: "Hi",
sv: "Hej"
},
hello.text: {
en: "Hur mår du?",
sv: "How are you?"
},
}
function mapToNewObj(locale, obj) {
// Here I want to return a new object that looks like this
let's say the locale is "sv"
return {
hello.title: Hej,
hello.text: 'Hur mår du?'
}
}
我想创建一个新对象,其中的键是例如“ hello.title”,值是作为第一个参数传入的语言环境的字符串。
我应该怎么做?
答案 0 :(得分:1)
return {
'hello.title': obj['hello.title'][locale],
'hello.text': obj['hello.text'][locale]
}
或通过循环
result = {}
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
result[key] = obj[key][locale]
}
}
return result
答案 1 :(得分:1)
let input = {
'hello.title': {
'en': "Hi",
'sv': "Hej"
},
'hello.text': {
'sv': "Hur mår du?",
'en': "How are you?"
},
};
function mapToNewObj(locale, obj) {
return {
'hello.title': input['hello.title'][locale],
'hello.text': input['hello.text'][locale]
}
}
console.log(mapToNewObj('sv', input));
答案 2 :(得分:1)
使用通用方法
var Language = {
"hello.title": {
en: "Hi",
sv: "Hej"
},
"hello.text": {
en: "Hur mår du?",
sv: "How are you?"
},
}
;
// fn receives (value, key), returns a new value for key.
const mapKeys = (fn) => obj => Object.entries(obj)
.reduce((res, [k, v]) => ({...res, [k]: fn.apply(null, [v, k])}), {});
const get = (key) => obj => obj[key];
console.log(mapKeys(get("sv"))(Language));
mapKeys
接受一个函数fn
并返回一个接受对象的新函数。它返回形状相同但值由fn
产生的对象。这里的fn
就是get
,它只是选择一个对象内的给定字段。
答案 3 :(得分:0)
您的意思是这样的吗?
var Language = {
en: {
title: 'hey',
text: 'Hur mår du?',
},
sv: {
title: 'hej',
text: 'How are you?',
},
};
// @param {string} locale The locale language return as "sv" or "en"
function returnLanguageMessage(locale) {
return {
Language[locale].title,
Language[locale].text
};
}