javascript - 将对象中的键映射到出现的键
问题描述
我有以下对象:
[{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()
可以单独解决这个问题。
解决方案
这是一个类似的答案,但性能应该稍高一些,因为它利用了映射散列而不是为每个条目进行查找。
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)
推荐阅读
- jenkins - 如何使用 jenkins fileOperations 插件重命名具有特定模式的文件?
- ios - 如何在 UIActivityViewController 模式中显示文件大小和类型
- java - 从文件中读取字符串并将其存储在本地,如何从文本中删除行分隔符
- ruby - Docker 中的 Ruby 设置
- binance - Binance API 如何计算 24 小时内的 priceChangePercent 到其他时间范围?
- html - 所需的输入类型日期不起作用:表单仍在提交
- c++ - 投掷和捕捉整数是如何工作的?
- django - 为什么heroku在应用部署时找不到gdal204.dll文件?
- json - 无法在 Python 中正确加载 JSON 文件(2 到 5 GB 大小)
- javascript - 构建 Angular 应用程序时出现“没有为“类{}”找到 NgModule 元数据错误