首页 > 解决方案 > 将对象中的键映射到出现的键

问题描述

我有以下对象:

[{animal: 1, hasLegs: true},{animal: 1, hasTail: false},
 {animal: 2, hasLegs: true},{animal: 2, hasTail: true},{animal: 3}]

我想将其重组为以下内容:

[
  { animal:1, info: { hasLegs: true, hasTail: false },
  { animal:2, info: { hasLegs: true, hasTail: true },
  { animal:3, into: {},
]

这样数组中的所有对象animal:1都统一在该键下,并将剩余的键与该键下的值相加info

一直在尝试使用map()-function但无法掌握它,不知道是否map()可以单独解决这个问题。

标签: javascriptnode.jsobject

解决方案


这是一个类似的答案,但性能应该稍高一些,因为它利用了映射散列而不是为每个条目进行查找。

const data = [{animal: 1, hasLegs: true},{animal: 1, hasTail: false},
  {animal: 2, hasLegs: true},{animal: 2, hasTail: true},{animal: 3}]

const infoMap = data.reduce((rollup, { animal, ...info }) => {
  const entry = rollup[animal] = rollup[animal] || {}
  Object.assign(entry, info)
  return rollup
}, {})

const result = Object.keys(infoMap)
  .map((animal) => ({
    animal,
    info: infoMap[animal]
  }))

console.log(result)

推荐阅读