У меня есть простой JSON с массивом, который содержит дополнительные объекты и т. Д., Как это:
languagePack:
[
{
'key': 'Username',
'value': 'Benutzername',
'group': 'default'
},
{
'key': 'Password',
'value': 'Passwort',
'group': 'default'
}
]
Но то, что я действительно хочу, это такой объект:
languagePack:
{
'Username': 'Benutzername',
'Password': 'Passwort'
}
Итак, я хочу сократить массив до простых пар ключ-значение, которые находятся внутри массива или даже объекта (ключи уникальны). У кого-нибудь есть идеи, как уменьшить это с некоторыми из этих классных функций массива? Я только придумал что-то вроде «для каждого» и построил свойство объекта «вручную» для свойства, но я помню, что были некоторые классные вещи для массива, такие как «уменьшить», оператор распространения (...), карта, каждый, некоторые и т. д.
Я попробовал это с чем-то вроде:
var temp = this.languagePack.map(([key, value]) => ({key,value}))
console.log(temp)
Но это только заставило меня получить сообщение об ошибке TypeError: Invalid attempt to destructure non-iterable instance
Изменить: все три ответа работают отлично. Спасибо.
источник
group
Должны быть проигнорированы?Ответы:
В основном вам нужно использовать
forEach
вместоmap
функции, а затем вы можете построить этот объект для любой пары ключ-значение, которое вы хотите сохранить.Попробуйте это, это решит вашу проблему.
Примечание: здесь мы не используем,
map
потому что мы хотим вернуть объект, а не массив, поэтому мы можем использоватьreduce
функцию здесь, чтобы сделать это, но я подумал, что было бы просто и легко понять, что мы хотим и что мы здесь делаем.источник
Вы можете использовать
reduce
функцию javascript, чтобы создать пустой объект и поместить в него каждый ключ и значение.Изменить: Хорошее предложение Донни Verduijn . Вы можете использовать es6 destructuring, чтобы написать функцию короче.
источник
(acc, { key, value }) => ({ ...acc, [key]: value })
const newData = data.reduce((acc, row) => (acc[row.key] = row.value, acc), {});
использовать вместе с
Array#map
его созданием ключ и значение в качестве объекта иObject.assign
скрытое значение массива для объектаисточник
Вы можете использовать ES6
Map
для этого использования,Object.fromEntries
чтобы преобразоватьmap
обратно вObject
.Для получения дополнительной информации о карте
источник