将javascript中的数组更改为更简单的对象

我有一个简单的 JSON,其中包含一个包含更多对象等的数组,如下所示:


languagePack:

[

  {

    'key': 'Username',

    'value': 'Benutzername',

    'group': 'default'

  },

  {

    'key': 'Password',

    'value': 'Passwort',

    'group': 'default'

  }

]

但我真正想要的是这样的对象:


languagePack: 

{

    'Username': 'Benutzername',

    'Password': 'Passwort'

}

因此,我想将数组简化为数组甚至对象内的简单键值对(键是唯一的)。有没有人知道如何使用这些很酷的数组函数来减少这种情况?我只想出了类似 for each 的东西,并为属性“手动”构建对象,但我记得数组有一些很酷的东西,比如“reduce”、展开运算符 (...)、map、every、一些等等。


我尝试了类似的东西:


var temp = this.languagePack.map(([key, value]) => ({key,value}))

console.log(temp)

但这只会给我一条错误消息 TypeError: Invalid attempt to destructure non-iterable instance


编辑:所有三个答案都运行良好。谢谢。


白衣染霜花
浏览 138回答 3
3回答

喵喔喔

基本上,您需要使用forEach而不是map函数,然后您可以将该对象构建为您想要保留的任何键值对。试试这个,它会解决你的问题。var temp = {};this.languagePack.forEach(({key,value}) => {    temp[key] = value})console.log(temp)注意:这里我们没有使用,map因为我们想要返回对象而不是数组,所以,我们可以reduce在这里使用函数来做到这一点,但我认为这会简单易懂我们想要什么以及我们在这里做什么。

肥皂起泡泡

您可以使用 javascriptreduce函数创建一个空对象并将每个键和值放入其中。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);编辑:Donny Verduijn 的好建议。您可以使用 es6 解构来编写更短的函数。const newData = data.reduce((acc, { key, value }) => ({ ...acc, [key]: value }), {});

Helenr

使用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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript