JSON数组字段如何累加并排序?

作者站长头像
站长
· 阅读数 16

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