工作记录——数组数据格式转换

// 现有以下数据格式表,按公司划分,对各公司的设备进行分类统计数量
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)

方法三

const deviceList = Object.keys(data[0]).filter((key) => key !== '公司');
const newData = deviceList.map((device) => {
  return {
    设备: device,
    ...Object.fromEntries(data.map((item) => [item['公司'], item[device]])),
  };
});
console.log(newData)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值