You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中按指定职级汇总薪资数值?

按职级汇总薪资的实现方法

问题场景

执行console.log(changes)得到的对象集合如下:

{
    "dt": "2022-07-01T00:00:00.000Z",
    "gradeName": "grade 3",
    "effectiveFrom": "2022-07-01T00:00:00.000Z",
    "salary": "10000.0000",
    "salaryEffective": "2022-07-01T00:00:00.000Z",
    "leaveDate": "2022-07-10T00:00:00.000Z",
    "dailyRate": "328.77"
}
{
    "dt": "2022-07-02T00:00:00.000Z",
    "gradeName": "grade 3",
    "effectiveFrom": "2022-07-01T00:00:00.000Z",
    "salary": "10000.0000",
    "salaryEffective": "2022-07-01T00:00:00.000Z",
    "leaveDate": "2022-07-10T00:00:00.000Z",
    "dailyRate": "328.77"
}

需要按gradeName(职级)汇总薪资,但遍历对象时遇到问题,尝试的代码如下:

for (const [index, [key, value]] of Object.entries(Object.entries(changes))) {
        console.log(`${index}: ${key} = ${value}`);
      }

控制台输出不符合预期。

问题分析

你写的Object.entries(Object.entries(changes))逻辑错误,changes本质是对象数组(零散对象需先整理成数组),直接嵌套Object.entries会把数组的索引和元素拆分成多层键值对,导致遍历逻辑完全混乱。

正确实现方法

1. 规范数据结构

先确保changes是数组格式(如果输出的是零散对象,手动整理):

const changes = [
  {
    "dt": "2022-07-01T00:00:00.000Z",
    "gradeName": "grade 3",
    "effectiveFrom": "2022-07-01T00:00:00.000Z",
    "salary": "10000.0000",
    "salaryEffective": "2022-07-01T00:00:00.000Z",
    "leaveDate": "2022-07-10T00:00:00.000Z",
    "dailyRate": "328.77"
  },
  {
    "dt": "2022-07-02T00:00:00.000Z",
    "gradeName": "grade 3",
    "effectiveFrom": "2022-07-01T00:00:00.000Z",
    "salary": "10000.0000",
    "salaryEffective": "2022-07-01T00:00:00.000Z",
    "leaveDate": "2022-07-10T00:00:00.000Z",
    "dailyRate": "328.77"
  }
];

2. 基础遍历汇总写法

用for...of遍历数组,借助对象存储各职级的薪资总和:

// 初始化汇总容器
const salarySummary = {};

// 遍历每个数据对象
for (const item of changes) {
  // 提取职级,将字符串薪资转为数字
  const grade = item.gradeName;
  const salary = parseFloat(item.salary);

  // 累加或初始化职级薪资
  salarySummary[grade] = salarySummary[grade] ? salarySummary[grade] + salary : salary;
}

// 输出汇总结果
console.log(salarySummary);
// 示例输出:{ "grade 3": 20000 }

3. 简化写法(reduce方法)

用数组reduce方法一步完成汇总:

const salarySummary = changes.reduce((acc, item) => {
  const grade = item.gradeName;
  const salary = parseFloat(item.salary);
  acc[grade] = (acc[grade] || 0) + salary;
  return acc;
}, {});

console.log(salarySummary);

注意事项

  • salary字段是字符串类型,必须用parseFloat或Number()转为数字后才能进行数值计算
  • 若存在多个不同职级,代码会自动按gradeName分别汇总

内容的提问来源于stack exchange,提问作者Bisoux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:40:36