SOURCE

const data = [
    {
        "直接人工": "604",
        "车间": "配件车间",
        "年度": "2021",
        "工厂": "贵阳联塑",
        "水电": "226",
        "折旧费": "11",
        "id": "815"
    },
    {
        "直接人工": "733",
        "车间": "管材车间",
        "年度": "2021",
        "工厂": "贵阳联塑",
        "水电": "5",
        "折旧费": "115",
        "id": "814"
    },
    {
        "直接人工": "378",
        "车间": "配件车间",
        "年度": "2021",
        "工厂": "武汉联塑",
        "水电": "501",
        "折旧费": "71",
        "id": "813"
    },
    {
        "直接人工": "864",
        "车间": "管材车间",
        "年度": "2021",
        "工厂": "武汉联塑",
        "水电": "345",
        "折旧费": "92",
        "id": "812"
    },
    {
        "直接人工": "958",
        "车间": "配件车间",
        "年度": "2021",
        "工厂": "广东科技",
        "水电": "169",
        "折旧费": "59",
        "id": "811"
    },
    {
        "直接人工": "404",
        "车间": "管材车间",
        "年度": "2021",
        "工厂": "广东科技",
        "水电": "775",
        "折旧费": "73",
        "id": "810"
    },
    {
        "直接人工": "210",
        "车间": "配件车间",
        "年度": "2020",
        "工厂": "贵阳联塑",
        "水电": "62",
        "折旧费": "125",
        "id": "809"
    },
    {
        "直接人工": "831",
        "车间": "管材车间",
        "年度": "2020",
        "工厂": "贵阳联塑",
        "水电": "127",
        "折旧费": "57",
        "id": "808"
    },
    {
        "直接人工": "22",
        "车间": "配件车间",
        "年度": "2020",
        "工厂": "武汉联塑",
        "水电": "480",
        "折旧费": "8",
        "id": "807"
    },
    {
        "直接人工": "411",
        "车间": "管材车间",
        "年度": "2020",
        "工厂": "武汉联塑",
        "水电": "754",
        "折旧费": "67",
        "id": "806"
    },
    {
        "直接人工": "927",
        "车间": "配件车间",
        "年度": "2020",
        "工厂": "广东科技",
        "水电": "238",
        "折旧费": "193",
        "id": "805"
    },
    {
        "直接人工": "571",
        "车间": "管材车间",
        "年度": "2020",
        "工厂": "广东科技",
        "水电": "509",
        "折旧费": "200",
        "id": "804"
    },
    {
        "直接人工": "617",
        "车间": "配件车间",
        "年度": "2022",
        "工厂": "贵阳联塑",
        "水电": "230",
        "折旧费": "32",
        "id": "803"
    },
    {
        "直接人工": "639",
        "车间": "管材车间",
        "年度": "2022",
        "工厂": "贵阳联塑",
        "水电": "795",
        "折旧费": "152",
        "id": "802"
    },
    {
        "直接人工": "373",
        "车间": "配件车间",
        "年度": "2022",
        "工厂": "武汉联塑",
        "水电": "371",
        "折旧费": "104",
        "id": "801"
    },
    {
        "直接人工": "324",
        "车间": "管材车间",
        "年度": "2022",
        "工厂": "武汉联塑",
        "水电": "509",
        "折旧费": "2",
        "id": "800"
    },
    {
        "直接人工": "938",
        "车间": "配件车间",
        "年度": "2022",
        "工厂": "广东科技",
        "水电": "331",
        "折旧费": "46",
        "id": "799"
    },
    {
        "直接人工": "218",
        "车间": "管材车间",
        "年度": "2022",
        "工厂": "广东科技",
        "水电": "20",
        "折旧费": "157",
        "id": "798"
    },
    {
        "直接人工": "48",
        "车间": "配件车间",
        "年度": "2024",
        "工厂": "贵阳联塑",
        "水电": "2",
        "折旧费": "110",
        "id": "797"
    },
    {
        "直接人工": "372",
        "车间": "管材车间",
        "年度": "2024",
        "工厂": "贵阳联塑",
        "水电": "310",
        "折旧费": "4",
        "id": "796"
    },
    {
        "直接人工": "894",
        "车间": "配件车间",
        "年度": "2024",
        "工厂": "武汉联塑",
        "水电": "592",
        "折旧费": "84",
        "id": "795"
    },
    {
        "直接人工": "358",
        "车间": "管材车间",
        "年度": "2024",
        "工厂": "武汉联塑",
        "水电": "710",
        "折旧费": "90",
        "id": "794"
    },
    {
        "直接人工": "74",
        "车间": "配件车间",
        "年度": "2024",
        "工厂": "广东科技",
        "水电": "53",
        "折旧费": "133",
        "id": "793"
    },
    {
        "直接人工": "620",
        "车间": "管材车间",
        "年度": "2024",
        "工厂": "广东科技",
        "水电": "455",
        "折旧费": "60",
        "id": "792"
    }
]
const dimesions = ['车间', '年度']
const quotas = ['直接人工', '水电']

function objectSort (arr = [], prop, order = true) {
  if (arr.length < 2) return arr
  let temp = [...arr]
  for (let i = 0; i < temp.length - 1; i++) {
      let [v, pos] = [temp[i][prop], i]
      for (let j = i + 1; j < temp.length; j++) {
        if (Number(v) > Number(temp[j][prop])) {
          v = temp[j][prop]
          pos = j
        }
      }
      [temp[i], temp[pos]] = [temp[pos], temp[i]]
  }
  return order ? temp : temp.reverse()
}

function generateMap(dimesions, quotas,data) {
    let map = {}
    data.forEach(e => {
        let str =''
        dimesions.forEach(dimes=>{
            str += `${e[dimes]}\n`
        })
        map[str] = map[str]||{}
        quotas.forEach(quota=>{
            map[str][quota] =  map[str][quota]||0
            map[str][quota] += +e[quota]
        })
        
    })
    return map
}

const sortYearData = objectSort(data,'年度',false)

const map = generateMap(dimesions,quotas,sortYearData)
let rows = []
for(let k in map){
    const obj = {...map[k]}
    obj['维度'] = k
    rows.push(obj)
}
console.log(rows)
console 命令行工具 X clear

                    
>
console