Как преобразовать массив объектов в объект в Lodash?
у меня есть это:
[ { list:
[ [Object],
[Object] ] },
{ head:
[ [Object],
[Object] ] }
]
и хотите превратить его в этот:
{ list:
[ [Object],
[Object] ],
head: [ [Object],
[Object] ]
}
Итак, массив объектов в объект. Было бы здорово добиться этого с лодашь.
5 ответов
Я думаю, что еще более коротким решением будет:
Object.assign({}, ...array)
Я знаю, что вы просили лодаш, но, похоже, вам даже не нужен этот путь. Если вы не хотите использовать _.extend
.
чтобы построить на большом ответе @rcsole, это хорошо работает:
states = [{
state: "NY",
name: "New York",
}, {
state: "AZ",
name: "Arizona",
}]
statesObj = Object.assign({}, ...states.map(state => {
return { [state.state]: state.name }
}))
результат:
{
AZ: "Arizona",
NY: "New York",
}
что здесь происходит?
давайте разберем это на несколько частей:
// Step 1: Transform from [{state: "Foo", name: "Bar"}, ...] to [{Foo: "Bar"}, ...]
mappedStates = states.map(state => { return { [state.state]: state.name } })
// Step 2: Merge all the objects in that array into a single new object
statesObj = Object.assign({}, ...mappedStates)
Шаг 1 использует map
перебирать каждый элемент массива (каждый объект состояния). map
выполняет функцию для каждого state
object и возвращает новый объект с состоянием в качестве ключа и именем в качестве значения. Нам нужно окружить state.state
в скобках потому что это динамическое значение в литерале объекта.
Шаг 2 использует Object.assign
чтобы объединить все новые объекты состояния в mappedStates
массива в новый объект (первый параметр, {}
).
Что такое три точки ...
для чего? Это оператор распространения. Он принимает каждый элемент mappedStates
массив и превращает их в непосредственный доводы Object.assign
метод.
этот пример дает понять:
Object.assign({}, ...mappedStates)
это же as
Object.assign({}, {AZ: "Arizona"}, {NY: "New York"})
вот именно!
используйте fromPairs на lodash 4. https://lodash.com/docs#fromPairs
_.fromPairs([['fred', 30], ['barney', 40]]);