JSON数组字段如何累加并排序?
category
属性相同,value
字段进行累加,然后按照累加结果的从大到小进行排序例如当 category
等于 金
的时候 那么 A,B,C 的 value 相加,最终按照相加结果的由大到小进行排序,最终顺序为 土、火、金;
[
{
"name": "A",
"category": "火",
"value": 9.5
},
{
"name": "B",
"category": "火",
"value": 7.5
},
{
"name": "C",
"category": "火",
"value": 6.15
},
{
"name": "A",
"category": "土",
"value": 10.5
},
{
"name": "B",
"category": "土",
"value": 12.5
},
{
"name": "C",
"category": "土",
"value": 15.02
},
{
"name": "A",
"category": "金",
"value": 0.75
},
{
"name": "B",
"category": "金",
"value": 0.3
},
{
"name": "C",
"category": "金",
"value": 0.15
}
]
期望结果
[
{
"name": "A",
"category": "土",
"value": 10.5
},
{
"name": "B",
"category": "土",
"value": 12.5
},
{
"name": "C",
"category": "土",
"value": 15.02
},
{
"name": "A",
"category": "火",
"value": 9.5
},
{
"name": "B",
"category": "火",
"value": 7.5
},
{
"name": "C",
"category": "火",
"value": 6.15
},
{
"name": "A",
"category": "金",
"value": 0.75
},
{
"name": "B",
"category": "金",
"value": 0.3
},
{
"name": "C",
"category": "金",
"value": 0.15
}
]
回复
1个回答

test
2024-07-12
acc = data.reduce((o, {category: c, value: v}) => {o[c] = (o[c] ?? 0) + v; return o}, {});
data.sort((a, b) => acc[b.category] - acc[a.category]);
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容