javascript - 将对象数组压缩为具有嵌套数组的唯一对象数组
问题描述
我在 MongoDB 中有 arr 数据,需要将文档压缩为一个,以便可以在 chartjs 中显示数据。
arr = [
{
"_id": "5d7baef782e09dc7f6b5be2d",
"awaySpread": "3.0",
"homeSpread": "-3.0",
"homeTeam": "Tennessee Titans",
"awayId": "4529605_261_sp",
"awayTeam": "Indianapolis Colts",
"homeId": "4529605_262_sp",
"eventDate": "2019-09-15 13:00:00",
"createdDate": "2019-09-13T13:00:06.527Z"
},
{
"_id": "5d7baef782e09dc7f6b5be31",
"awaySpread": "-19.5",
"homeSpread": "19.5",
"homeTeam": "Miami Dolphins",
"awayId": "4529609_269_sp",
"awayTeam": "New England Patriots",
"homeId": "4529609_270_sp",
"eventDate": "2019-09-15 13:00:00",
"createdDate": "2019-09-13T13:00:06.527Z"
},
{
"_id": "5d7baef782e09dc7f6b5be2d",
"awaySpread": "2.5",
"homeSpread": "-2.5",
"homeTeam": "Tennessee Titans",
"awayId": "4529605_261_sp",
"awayTeam": "Indianapolis Colts",
"homeId": "4529605_262_sp",
"eventDate": "2019-09-15 13:00:00",
"createdDate": "2019-09-13T13:30:06.527Z"
}
]
希望进入:
newarr = [
{
"_id": "5d7baef782e09dc7f6b5be2d",
"awaySpread": "3.0",
"homeSpread": "-3.0",
"homeTeam": "Tennessee Titans",
"awayId": "4529605_261_sp",
"awayTeam": "Indianapolis Colts",
"homeId": "4529605_262_sp",
"eventDate": "2019-09-15 13:00:00",
"createdDate": "2019-09-13T13:00:06.527Z",
"lines": {
"spread": ["3.0","2.5"],
"dates: : ["2019-09-13T13:00:06.527Z","2019-09-13T13:30:06.527Z"]
},
},
{
"_id": "5d7baef782e09dc7f6b5be31",
"awaySpread": "-19.5",
"homeSpread": "19.5",
"homeTeam": "Miami Dolphins",
"awayId": "4529609_269_sp",
"awayTeam": "New England Patriots",
"homeId": "4529609_270_sp",
"eventDate": "2019-09-15 13:00:00"
"createdDate": "2019-09-13T13:00:06.527Z",
"lines": {
"spread": ["-19.5"],
"dates: : ["2019-09-13T13:00:06.527Z"]
},
}
]
我可以使用过滤器仅返回基于 awayId 的唯一对象,但我不确定使用过滤器是否允许我推送带有点差和日期的行。
解决方案
我会使用reduce函数。
我正在构建一个对象,其中 id 是键,值是对象。当我已经有 id 时(我第二次遇到相同的 id),我推送相关值。
最后,我控制台记录了您想要的输出对象的值。
arr = [
{
"_id": "5d7baef782e09dc7f6b5be2d",
"awaySpread": "3.0",
"homeSpread": "-3.0",
"homeTeam": "Tennessee Titans",
"awayId": "4529605_261_sp",
"awayTeam": "Indianapolis Colts",
"homeId": "4529605_262_sp",
"eventDate": "2019-09-15 13:00:00"
},
{
"_id": "5d7baef782e09dc7f6b5be31",
"awaySpread": "-19.5",
"homeSpread": "19.5",
"homeTeam": "Miami Dolphins",
"awayId": "4529609_269_sp",
"awayTeam": "New England Patriots",
"homeId": "4529609_270_sp",
"eventDate": "2019-09-15 13:00:00"
},
{
"_id": "5d7baef782e09dc7f6b5be2d",
"awaySpread": "2.5",
"homeSpread": "-2.5",
"homeTeam": "Tennessee Titans",
"awayId": "4529605_261_sp",
"awayTeam": "Indianapolis Colts",
"homeId": "4529605_262_sp",
"eventDate": "2019-09-15 13:00:00"
}
]
const newArr = arr.reduce((result, itr) => {
if (result[itr.awayId]) {
result[itr.awayId].lines.spread.push(itr.awaySpread)
result[itr.awayId].lines.dates.push(itr.eventDate)
} else {
result[itr.awayId] = { ...itr, lines: { spread: [itr.awaySpread], dates: [itr.eventDate] }}
}
return result
}, {})
console.log(Object.values(newArr))
推荐阅读
- jqgrid - 网格不会填充在 free-jqgrid 中
- javascript - 如何在画布中旋转对象时使用键盘射击子弹 360*?
- r - 如何使用R在最接近的数值上合并两个长度不均匀的数据结构
- react-native - 反应原生 | 默认设置宽度样式
- ios - 将 iOS 小部件添加到 macOS 目标
- java - 有没有一种优雅的方法来检查许多条件并调用相应的函数?
- php - 使用myth-auth Codeigniter 4登录后重定向到上一页
- r - 在 R 中添加白天/黄昏/夜晚/黎明的信息以跟踪数据
- kubernetes - 我的集群中的 pod 可以获取服务中的 pod 列表吗?
- spring-boot - 如何在 Arrays.asList().contains() 的单元测试中返回 true