преобразовать карту в список объектов - PullRequest
0 голосов
/ 26 марта 2019

Введите:

{
    "8": [{
        "a": 1,
        "b": 2
    }],
    "13": [{
        "a": 3,
        "b": 4
    }]

}

выход

[
  {
        "a": 1,
        "b": 2,
        "type": 8
    },
    {
        "a": 3,
        "b": 4,
        "type": 13
    }
]

Я пытался сделать вложенную карту, но безуспешно. Пожалуйста, помогите, если есть простой способ сделать это.

result = _.map(input, temp => _.map(temp, obj => _.assign(_.pick(obj, ['a', 'b']))));   

Ответы [ 2 ]

2 голосов
/ 26 марта 2019

Вот техника, которая должна работать:

const transform = (input) => Object.entries(input)
  .map(([key, val]) => val.map(v => ({...v, type: key})))
  .flat()

const input = {"13": [{"a": 3, "b": 4}], "8": [{"a": 1, "b": 2}]}

console.log(transform(input))

Как указывалось в другом ответе , если целевые среды не поддерживают flat, вы можете заменить это:

      .flat()

с этим:

      .reduce((a, b) => a.concat(b), [])
1 голос
/ 26 марта 2019

Вы можете использовать _.flatMap() для итерации объекта и выравнивания результатов.Внутри flatMap итерируйте значения с _.map() и используйте _.assign() для объединения исходного объекта и типа:

const input = {
    "8": [{
        "a": 1,
        "b": 2
    }],
    "13": [{
        "a": 3,
        "b": 4
    }]
}

const result = _.flatMap(input, // iterate the object and flatten the results
  (values, type) => _.map( // iterate the arrays
    values, v => _.assign({ type }, v) // combine the type with the object
  )
)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
...