所以我使用languages.js.org创建多语言网站,数据库名为ft_main
table ft_lang
,翻译包含2列:id,en。
使用JSON,我可以从我的数据库中显示JSON对象,如下所示:
{"id":"1","en":"First translation"},
{"id":"2","en":"Second translation"},
{"id":"3","en":"Third translation"},
...
但是languages.js不会像上面那样使用对象格式运行,它将以如下格式运行:
{"1":"First translation"},
{"2":"Second translation"},
{"3":"Third translation"},
...
那么如何使用JSON以我上面提到的格式从我的数据库中显示对象呢?
您可以使用map
来简化代码:
var data = [
{"id":"1","en":"First translation"},
{"id":"2","en":"Second translation"},
{"id":"3","en":"Third translation"}];
var newData = data.map(obj => ({[obj.id]: obj.en}));
console.log(newData);
说明:
data.map(fn)
将函数fn
应用于data
数组中的每个元素,并将结果返回到相同大小的数组中。obj => ({[obj.id]: obj.en})
是一个翻译,它接受一个obj
并返回一个包含单个属性的对象,其中obj.id
为关键,obj.en
为值。
这就是将{"id": "foo", "en": "bar"}
变成{"foo": "bar"}
的原因。
外部()
是必需的,否则JavaScript将尝试将{}
中的内容视为函数。
在[]
周围需要obj.id
,所以解析器知道整个关键是obj.id
而不是obj
。你只需要遍历数组并创建一个像这样的新数组:
var data = [
{"id":"1","en":"First translation"},
{"id":"2","en":"Second translation"},
{"id":"3","en":"Third translation"}];
var newData = [];
data.forEach(function(obj) {
var newObj = {};
newObj[obj.id] = obj.en;
newData.push(newObj);
});
console.log(newData);