Я не вижу функции, которая сделает это за вас, поэтому вот решение, которое решает проблему за несколько простых шагов, используя только функции lodash.
const listOfPairs = _.flatten(_.map(input, _.toPairs))
преобразует списокобъекты в список пар [ключ, значение]
listOfPairs = [
[ 'color', 'black' ],
[ 'type', 'bag' ],
[ 'color', 'red' ],
[ 'type', 'pants' ] ]
Теперь мы можем сгруппировать их по значениям в первой позиции в каждой паре.
const indexByKeyToValues = _.toPairs(_.groupBy(listOfPairs, _.head))
, что даетus
indexByKeyToValues = [
[ 'color', [ ['color', 'black'], ['color', 'red'] ] ],
[ 'type', [ ['type', 'bag'], ['type', 'pants'] ] ] ]
затем сопоставьте массивы значений, чтобы выбрать последний элемент (исходные значения на входных картах)
const pairsOfKeyAndValue = _.map(indexByKeyToValues, ([k, vs]) => [k, _.map(vs, _.last)])
, который почти существует
pairsOfKeyAndValue = [
[ 'color', [ 'black', 'red' ] ],
[ 'type', [ 'bag', 'pants' ] ] ]
нам просто нужно перестроить объект, используя эти пары
const result = _.fromPairs(pairsOfKeyAndValue)
Весь трюк "преобразования карты в последовательности пар и из пар" действительно распространен в функциональном программировании для выполнения такой обработки.Как только вы это сделаете, выяснить остальные шаги не так сложно.
Надеюсь, это даст вам общее представление о том, что вы можете использовать для решения подобных проблем в будущем.