Как преобразовать массив объектов в объект в Lodash?

у меня есть это:

    [ { list: 
             [ [Object],
               [Object] ] },
      { head:
             [ [Object],
               [Object] ] }
    ]

и хотите превратить его в этот:

    { list: 
                 [ [Object],
                   [Object] ],
      head:      [ [Object],
                   [Object] ]
    }

Итак, массив объектов в объект. Было бы здорово добиться этого с лодашь.

5 ответов


_.reduce(array, function(memo, current) { return _.assign(memo, current) },  {})

Я думаю, что еще более коротким решением будет:

Object.assign({}, ...array)

Я знаю, что вы просили лодаш, но, похоже, вам даже не нужен этот путь. Если вы не хотите использовать _.extend.


вот более короткая версия:

_.transform(array, _.ary(_.extend, 2),  {});

на transform ()


чтобы построить на большом ответе @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]]);