我正在尝试将我的数据重新格式化为适合React-Google-Chart
的数据格式。
我当前的数据(保存为状态)是对象数组。如下所示:
[ { _id: 5bbbb89a1a3ab50bcbd750a3,
desc: 'Market',
total: 4000,
amount: 1,
timestamp: '10/8/2018 4:05:45 PM' },
{ _id: 5bbbb8ac1a3ab50bcbd750a7,
desc: 'Deliver',
total: 2000,
amount: 1,
timestamp: '10/8/2018 4:06:03 PM' },
{ _id: 5bbbb8ac1a3ab50bcbd750a8,
desc: 'Market',
total: 4000,
amount: 1,
timestamp: '10/8/2018 4:06:03 PM' },
{ _id: 5bbbb8ac1a3ab50bcbd750a9,
desc: 'CPM',
total: 14000,
amount: 1,
timestamp: '10/8/2018 4:06:03 PM' },
{ _id: 5bbca335ef3899eb5fcbed51,
desc: 'Deliver',
total: 4000,
amount: 2,
timestamp: '10/9/2018 8:46:44 AM' }]
我正在尝试将它们映射到以下内容:
[["Market", "2"], ["Deliver", 3], ["CPM", 1"]]
到目前为止,我一直在工作,但是没有按照我想要的方式工作。
让我解释一下:这部分数据是从备份中发送的,并保存为componentDidMount()
中的状态。传达数据格式的函数将在初始渲染中调用。所以这是问题所在,如果不使用map函数,该函数将失败,因为在初始渲染期间,我的状态下没有数据。我发现的一种方法是使用地图功能,这样我就可以为我的初始渲染工作。
我到目前为止有什么:
mapBarArray(){
if(this.state.history.length > 0){
var barObject =[]
for(var eachItem of this.state.history){
var desc = eachItem.desc;
var amount = eachItem.amount;
if (!barObject[desc]) {
barObject[desc] = [
desc,
amount
];
}else{
barObject[desc][1] +=1
}
}
}
}
上面的代码将返回array对象的array。然后,我可以将每个对象的值放入最终数组中,这就是我想要的。但是,此方法不使用map,因此它将使初始渲染失败。
What I need help with
:使用地图功能或任何类型的功能,以便在初始渲染期间进行传达,以便我可以使用它来绘制图表
答案 0 :(得分:2)
这就像ggbarplot(ToothGrowth, x = "dose", y = "len", add = "mean_se", color = "supp",
fill = "supp",position = position_dodge(0.8),add.params = list(group = "supp"))+
stat_compare_means(ref.group = "0.5", group.by = "supp",label = "p.signif")
编辑,我没有意识到您正在汇总金额。在这种情况下,我通常会按照以下方式进行操作:
data.map (({amount, desc}) => [desc, amount])
map = data.reduce ((map, {amount, desc}) => {
map [desc] = ~~map[desc] + ~~amount;
return map;
},{});
Object.keys (map).map (k => [k,map[k]]);
let map = data.reduce ((map, {amount, desc}) => {
map [desc] = ~~map[desc] + ~~amount;
return map;
},{});
let mapped = Object.keys (map).map (k => [k,map[k]]);
console.log (JSON.stringify(mapped))