// 现有以下数据格式表,按公司划分,对各公司的设备进行分类统计数量let data =[{公司:'寿险',硬件设备:5,操作系统:15,数据库中间件:25,安全:5,网络:9},{公司:'健康险',硬件设备:7,操作系统:13,数据库中间件:5,安全:21,网络:17},{公司:'南中心',硬件设备:18,操作系统:28,数据库中间件:5,安全:12,网络:17},{公司:'科技运营部',硬件设备:12,操作系统:13,数据库中间件:22,安全:19,网络:12},{公司:'88号',硬件设备:21,操作系统:15,数据库中间件:10,安全:5,网络:6}];// 要求:改成以下数据格式,按设备划分各子公司拥有的数量//[//{"设备":"硬件设备","寿险":5,"健康险":7,"南中心":18,"科技运营部":12,"88号":21},//{"设备":"操作系统","寿险":15,"健康险":13,"南中心":28,"科技运营部":13,"88号":15},//{"设备":"数据库中间件","寿险":25,"健康险":5,"南中心":5,"科技运营部":22,"88号":10},//{"设备":"安全","寿险":5,"健康险":21,"南中心":12,"科技运营部":19,"88号":5},//{"设备":"网络","寿险":9,"健康险":17,"南中心":17,"科技运营部":12,"88号":6}//]
方法一:借助中间对象
let hashTmp ={};
data.forEach(e=>{for(let k in e){
hashTmp[k]= hashTmp[k]||{}
hashTmp[k][e['公司']]= e[k]}})let newData =[]for(let k in hashTmp){if(k!=='公司'){
hashTmp[k]['设备']= k
newData.push(hashTmp[k])}}
console.log(newData)
方法二
let newData = Object.values(data.reduce((res,o)=>{
Object.entries(o).forEach(([k,v])=> k !='公司'&&((res[k]||={'设备': k})[o['公司']]= v))return res;},{}))
console.log(newData)