[英]How to extract data from javascript object using map() in javascript?
我正在尝试使用javascript中的.map()
从JSON数据中提取数据。 数据提取需要注入stacked bar chart
。
我正在尝试类似于此问题: 在Chart.js中使用JSON数据堆积条形图,但就我而言,我希望每个赛季的总行驶次数将是barchart的高度,而stacked-barchart的总高度将分为3堆栈。
检查此以获取堆积的条形图: https : //gionkunz.github.io/chartist-js/examples.html#stacked-bar
我的JSON数据:
const batdata=[
{"season":2008,
"runs":25,
"tournamentName":"XYZ"
},
{"season":2008,
"runs":125,
"tournamentName":"ABC"
},
{"season":2008,
"runs":825,
"tournamentName":"PQR"
},
{"season":2009,
"runs":425,
"tournamentName":"XYZ"
},
{"season":2009,
"runs":255,
"tournamentName":"ABC"
},
{"season":2010,
"runs":275,
"tournamentName":"XYZ"
},
{"season":2010,
"runs":675,
"tournamentName":"ABC"
}
];
export default batdata;
在chart.js中:
import React, { Component } from 'react';
import batdata from './batdata';
const uniq = a => [...new Set(a)]
const uniqueseason = uniq(
batdata.map( newdata => newdata.season)
)
const runsperseason = batdata.map( newdata => {
})
class Chart extends Component {
render(){
return(
<div>
</div>
)}
}
export default Chart;
我正在使用.map()
获得唯一的赛季,然后再次嵌套map()
来获得特定锦标赛名称在特定季节的跑步。 我如何解析数据外部json文件。 最终数据应如下所示:
labels = [2008,2009 2010]
Chartdata = [
[25, 125, 825] <--- Height of barchart = 825+25+125 and it will have 3 stacks because there are 3 tournamentName
[425, 255, 0] <-- tournamentName: PQR not present in season 2009 so 3rd element zero
[275, 675, 0] <---tournamentName: PQR not present in season 2010 so 3rd element zero
]
我想提取数据并将其以3个数组的形式存储在3个数据中:
1)Runs in season 2008 for tournamentName: XYZ,ABC, PQR
2)Runs in season 2009 for tournamentName: XYZ, ABC, PQR
3)Runs in season 2010 for tournamentName: XYZ, ABC, PQR
在将数据存储在3个不同的数组中之后,我们可以仅使用解构运算符...
来解包数组元素并填充chartdata。
您可以使用Array#reduce
创建映射以定义此类过滤对象。
let filterData = batdata.reduce((filter, value, index) => {
if (filter[value.season]) {
filter[value.season] = [...filter[value.season], value.season];
} else {
filter[value.season] = [value.season];
}
return filter;
}, {});
console.log(filterData)
工作代码和邮箱
您可以尝试关注
const batdata=[{"season":2008,"runs":25,"tournamentName":"XYZ"},{"season":2008,"runs":125,"tournamentName":"ABC"},{"season":2008,"runs":825,"tournamentName":"PQR"},{"season":2009,"runs":425,"tournamentName":"XYZ"},{"season":2009,"runs":255,"tournamentName":"ABC"},{"season":2010,"runs":275,"tournamentName":"XYZ"},{"season":2010,"runs":675,"tournamentName":"ABC"}]; // Create set for unique tournament names let tournaments = new Set(); /* Create an object with key as season name and value as object with ** tournament name as key and run as value */ let obj = batdata.reduce((a,{season, runs, tournamentName}) => { a[season] = a[season] || {}; a[season][[tournamentName]] = runs; tournaments.add(tournamentName); return a; },{}); // Create array from set of unique tournament names tournaments = Array.from(tournaments); // Get the labels - seasons let labels = Object.keys(obj); // Get the data let chartData = Object.values(obj); // Set runs as 0 for missing tournament in the season chartData = chartData.map((o) => tournaments.reduce((a,t) => [...a, o[t] ? o[t] : 0], [])); console.log(labels); console.log(chartData);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.