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