Mar*_*ger 13 javascript arrays
我有一个简单的JSON,其中包含一个包含其他对象等的数组,如下所示:
languagePack:
[
{
'key': 'Username',
'value': 'Benutzername',
'group': 'default'
},
{
'key': 'Password',
'value': 'Passwort',
'group': 'default'
}
]
Run Code Online (Sandbox Code Playgroud)
但是我真正想要的是这样的对象:
languagePack:
{
'Username': 'Benutzername',
'Password': 'Passwort'
}
Run Code Online (Sandbox Code Playgroud)
因此,我想将数组简化为数组甚至对象内部的简单键值对(键是唯一的)。有谁知道如何通过一些很棒的数组函数来减少这种情况?我只为每个对象想出了一个类似的东西,并为属性建立了“手工”对象的属性,但我记得数组中有一些很棒的东西,例如“ reduce”,散布运算符(...),map,一些,等等
我尝试了类似的东西:
var temp = this.languagePack.map(([key, value]) => ({key,value}))
console.log(temp)
Run Code Online (Sandbox Code Playgroud)
但这只会给我一条错误消息 TypeError: Invalid attempt to destructure non-iterable instance
编辑:所有三个答案都工作正常。谢谢。
Max*_*rou 10
您可以使用javascript reduce函数创建一个空对象,并将每个键和值放入其中。
const data = [
{
'key': 'Username',
'value': 'Benutzername',
'group': 'default'
},
{
'key': 'Password',
'value': 'Passwort',
'group': 'default'
}
];
const newData = data.reduce((acc, row) => {
acc[row.key] = row.value;
return acc;
}, {});
console.log(newData);Run Code Online (Sandbox Code Playgroud)
编辑:Donny Verduijn的好建议。您可以使用es6解构来缩短函数的编写时间。
const newData = data.reduce((acc, { key, value }) => ({ ...acc, [key]: value }), {});
Run Code Online (Sandbox Code Playgroud)
基本上,您需要使用forEach而不是map函数,然后可以将该对象构建为要保留的任何键,值对。
试试这个,它将解决您的问题。
var temp = {};
this.languagePack.forEach(({key,value}) => {
temp[key] = value
})
console.log(temp)
Run Code Online (Sandbox Code Playgroud)
注意:这里我们不使用,map因为我们要返回对象而不是数组,因此,我们可以reduce在这里使用函数来这样做,但是我认为这很容易理解我们想要的东西以及我们在这里做什么。
与Array#map它一起使用创建键和值作为对象,并将Object.assign隐式数组的值作为对象
const languagePack = [ { 'key': 'Username', 'value': 'Benutzername', 'group': 'default' }, { 'key': 'Password', 'value': 'Passwort', 'group': 'default' } ];
var res = Object.assign({},...languagePack.map(({key,value}) => ({[key]:value})))
console.log(res)Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
682 次 |
| 最近记录: |