javascript - 合并对象数组中的两个对象
问题描述
我有以下数组:
[
{
"idItem": "5d656f10394d6524c821f1b1",
"mark": 5,
"date": "2018-11-27T00:00:00.000Z"
},
{
"idItem": "5d656f10394d6524c821f1b1",
"mark": 2,
"date": "2018-11-27T00:00:00.000Z"
},
{
"idItem": "5d656f10394d6524c821f1b1",
"mark": 1,
"date": "2018-12-27T00:00:00.000Z"
},
{
"idItem": "5d656f10394d6524c821f1b1",
"mark": 2,
"date": "2018-12-27T00:00:00.000Z",
}
]
我想根据idItem和日期合并对象并计算平均标记,这样我就可以拥有以下内容:
[
{
"idItem": "5d656f10394d6524c821f1b1",
"mark": 3.5,
"date": "2018-11-27T00:00:00.000Z"
},
{
"idItem": "5d656f10394d6524c821f1b1",
"mark": 1.5,
"date": "2018-12-27T00:00:00.000Z"
}
]
解决方案
尝试这个:
const input = [
{ idItem: "5d656f10394d6524c821f1b1", mark: 5, date: "2018-11-27T00:00:00.000Z" },
{ idItem: "5d656f10394d6524c821f1b1", mark: 2, date: "2018-11-27T00:00:00.000Z" },
{ idItem: "5d656f10394d6524c821f1b1", mark: 1, date: "2018-12-27T00:00:00.000Z" },
{ idItem: "5d656f10394d6524c821f1b1", mark: 2, date: "2018-12-27T00:00:00.000Z" }
];
const ids = new Set(input.map(e => `${e.idItem} ${e.date}`));
const grouped = [...ids].map(id => input.filter(
e => `${e.idItem} ${e.date}` === id
)).map(
group => ({
...group[0],
mark: group.reduce((acc, cur) => cur.mark + acc, 0) / group.length,
})
);
您可以在此处查看已注销的结果
可能不是性能最高的,但它确实有效。首先我们得到一组 id 和 date 的所有组合,然后过滤每个组合的输入。然后,对于每个组,我们将日期和 ID 复制到结果中,并减少条目以获得平均值。
推荐阅读
- json - 弹性搜索;如何优化突出显示语法以避免长时间使用基于 json 的文档
- search - 如何在 sublime text 中扩展 ctrl+p 的搜索
- python - Python 中 gRPC 拦截器的 Sentry 集成
- javascript - 从模块类型的另一个脚本访问变量
- php - 如果请求 wp-admin,Apache 重写规则以停止重定向
- reactjs - 从 React 中的单独组件更新状态
- python - 如何将图像切成 9 部分,然后将裁剪图像保存到特定文件夹中?(在蟒蛇中)
- amazon-web-services - 无法使用 Cloudformation 创建 KMS
- php - 如何检查序列化表单是否包含文件输入
- c# - sortby thenby 未按预期排序