javascript - 如何通过两个相同的键按json数组分组
问题描述
如何根据两个 json 键进行分组,即 f 和 b 我的 json 数组
var json=[
{ s:'s', f:1, b:1, q:2 },
{ s:'s', f:1, b:1, q:3 },
{ s:'s', f:2, b:1, q:2 },
{ s:'s', f:2, b:1, q:2 },
{ s:'s', f:1, b:2, q:2 },
{ s:'s', f:1, b:2, q:2 },
{ s:'s', f:0, b:1, q:2 },
{ s:'s', f:0, b:1, q:2 },
{ s:'s', f:1, b:0, q:2 },
{ s:'s', f:1, b:0, q:2 },
{ s:'s', f:0, b:0, q:2 },
{ s:'s', f:0, b:0, q:2 },
];
预期产出
var op=[
{ s:'s', f:1, b:1, q:5 },
{ s:'s', f:2, b:1, q:4 },
{ s:'s', f:1, b:2, q:4 },
{ s:'s', f:0, b:1, q:4 },
{ s:'s', f:1, b:0, q:4 },
{ s:'s', f:0, b:0, q:4 },
];
解决方案
var json=[
{ s:'s', f:1, b:1, q:2 },
{ s:'s', f:1, b:1, q:3 },
{ s:'s', f:2, b:1, q:2 },
{ s:'s', f:2, b:1, q:2 },
{ s:'s', f:1, b:2, q:2 },
{ s:'s', f:1, b:2, q:2 },
{ s:'s', f:0, b:1, q:2 },
{ s:'s', f:0, b:1, q:2 },
{ s:'s', f:1, b:0, q:2 },
{ s:'s', f:1, b:0, q:2 },
{ s:'s', f:0, b:0, q:2 },
{ s:'s', f:0, b:0, q:2 },
];
var result = Object.values(json.reduce((list, cur) => {
if(list[cur.f + ',' + cur.b])
list[cur.f + ',' + cur.b].q += cur.q
else
list[cur.f + ',' + cur.b] = Object.assign({}, cur)
return list
}, {}))
console.log(result)
推荐阅读
- python - 仅在一行中从字符串中提取字符
- java - org.apache.commons.text 的依赖关系是什么?
- vba - 将两个访问查询导出到一个 excel 文件到各自的工作表上
- r - R for循环与多个数据帧上的if else
- php - Python 相当于 PHPDoc 块?
- javascript - 复选框 JavaScript 不会更改样式表
- sql - 在这些情况下我可以切换到简单恢复吗?
- java - 具有 API 值的倒数计时器
- ios - 无法打开任何 HTTPS 资源 Swift
- php - 在 laravel 5.6 中使用 ajax 序列化 Form 动态图像字段