首页 > 解决方案 > 如何将收到的对象转换为包含所需数据的另一个对象?

问题描述

我得到以下格式的 JSON:

卖家按名称和日期分组,显示当天的销售量。

{ 
   "Isabela Alves de Quadros":{ 
      "2019-10-22":4500,
      "2019-10-25":120,
      "2019-11-04":60
   },
   "Naiara":{ 
      "2019-10-25":5000,
      "2019-10-28":10,
      "2019-10-31":6000
   },
   "Nathália":{ 
      "2019-10-17":15,
      "2019-11-01":125
   }
}

我想把它变成一个对象,如下所示:


{
 {
  name: "Isabela Alves de Quadros",
  data: [null, 4500, 120, null, null, null, 60]
 },
 {
  name: "Naiara",
  data: [null, null, 5000, 10, 6000, null, null]
 },
 {
  name: "Nathália",
  data: [15, null, null, null, null, 125, null]
 }
}

如果数据没有价值,我就放空。

有谁知道如何做到这一点或有想法展示?

已经试着做地图了,但是没用,找了好几个地方,都没有找到,可能是找错了路。

但提前谢谢谁能帮忙。

标签: javascriptobject

解决方案


// 做的很快。可能不是一个有效的解决方案。// 在http://playcode.io中运行

const data = { 
   "Isabela Alves de Quadros":{ 
      "2019-10-22":4500,
      "2019-10-25":120,
      "2019-11-04":60
   },
   "Naiara":{ 
      "2019-10-25":5000,
      "2019-10-28":10,
      "2019-10-31":6000
   },
   "Nathália":{ 
      "2019-10-17":15,
      "2019-11-01":125
   }
}

console.log(data)
var names = Object.keys(data);
console.log(names);

var dates = Object.values(data);
console.log(dates);

var allDates =  dates.map((item) => (Object.keys(item)));
console.log(allDates);

var merged = ([].concat.apply([], allDates));
var dist = new Set(merged);
console.log(dist);

var finalData = [];

for(let name of names)
{ 
  var dates = [];
  for (let [key, value] of dist.entries())
  {
     var tempDates = data[name];
     if(tempDates[key] != undefined){
        dates.push(tempDates[key]);
      }
      else{
        dates.push(null);
      }
  }
  finalData.push( {name: name, data:dates})
} 

console.log(finalData);

推荐阅读