Javascript 将Json中的数据过滤到可在HighChartsJs中使用的新数组
我目前正在与HighCharts JS合作。对于要在HighCharts中显示的数据,我必须拥有以下最终数据:Javascript 将Json中的数据过滤到可在HighChartsJs中使用的新数组,javascript,Javascript,我目前正在与HighCharts JS合作。对于要在HighCharts中显示的数据,我必须拥有以下最终数据: [ { name: 'Performing', data: [1941404, 1028717, 697370, 0, 0, 0] }, { name: 'Non performing', data: [0, 0, 0, 1759908, 890857, 280235] }, { name: 'Substandard',
[
{
name: 'Performing',
data: [1941404, 1028717, 697370, 0, 0, 0]
},
{
name: 'Non performing',
data: [0, 0, 0, 1759908, 890857, 280235]
},
{
name: 'Substandard',
data: [0, 0, 863825, 0, 0, 0]
},
{
name: 'Written-off',
data: [0, 0, 0, 0, 0, 77146]
}
]
“数据”是一个包含6个对象的数组,用于填充图表的X轴
但是,我有以下通过MongoDb提供的数据
const chartData = [
{
"_id": {
"data": "90 - 180",
"status": "Non Performing"
},
"value": 1759908
},
{
"_id": {
"data": "360",
"status": "Written-off"
},
"value": 77146
},
{
"_id": {
"data": "360",
"status": "Non Performing"
},
"value": 280235
},
{
"_id": {
"data": "30 - 90",
"status": "Substandard"
},
"value": 863825
},
{
"_id": {
"data": "30 - 90",
"status": "Performing"
},
"value": 697370
},
{
"_id": {
"data": "180 - 360",
"status": "Non Performing"
},
"value": 890857
},
{
"_id": {
"data": "0 - 30",
"status": "Performing"
},
"value": 1028717
},
{
"_id": {
"data": "0",
"status": "Performing"
},
"value": 1941404
}
]
我需要过滤后一个代码,这样它就会像前一个代码一样结束。非常重要的是,在数据数组中,我们以6个对象结束,以确保填充Highcharts的整个xAxis,因此我们看到很多零,而没有提供任何数据
我真的希望这能把事情弄清楚。感谢所有有帮助的人。我很抱歉在补偿中如此含糊
快速注意数据数组的顺序如下:0、0-30、30-90、90-180、180-360、360
编辑的
这就是我目前使用的代码:
const data = this.chartData
let series
series = Object.values(data.reduce((acc, currVal) => {
acc[currVal._id.status] = acc[currVal._id.status] || {
name: currVal._id.status,
data: []
};
acc[currVal._id.status].data.push(currVal.totalBookValue) //push the year to data array after converting the same to a Number
return acc //return the accumulator
}, {}))
这种方法可以工作,但不能用6个元素填充数据数组。您的问题可以通过使用到达
对象表单并返回到数组表单(假设您发布的0
到360
列表已完成)来解决
有关实际示例,请参见下文
//输入。
常量输入=[
{
“_id”:{
“数据”:“90-180”,
“状态”:“不良”
},
“价值”:1759908
},
{
“_id”:{
“数据”:“360”,
“状态”:“已注销”
},
“价值”:77146
},
{
“_id”:{
“数据”:“360”,
“状态”:“不良”
},
“价值”:280235
},
{
“_id”:{
“数据”:“30-90”,
“状态”:“不合格”
},
“价值”:863825
},
{
“_id”:{
“数据”:“30-90”,
“状态”:“正在执行”
},
“价值”:697370
},
{
“_id”:{
“数据”:“180-360”,
“状态”:“不良”
},
“价值”:890857
},
{
“_id”:{
“数据”:“0-30”,
“状态”:“正在执行”
},
“价值”:1028717
},
{
“_id”:{
“数据”:“0”,
“状态”:“正在执行”
},
“价值”:1941404
}
]
//深度。
常量深度=['0','0-30','30-90','90-180','180-360','360']
//对象形式。
const objectform=input.reduce((累加器,x)=>{
常量{u id,value}=x//\u id.value。
让{data,status}=\u id//status。
status=status.toLowerCase()//小写。
常量点={…累加器[状态],[数据]:值}//数据。
返回{…累加器,[状态]:点}//更新+返回累加器。
}, {})
//输出。
常量输出=Object.keys(objectform).map((key)=>{
返回{
name:key,//name。
数据:depth.map((frame)=>objectform[key][frame]| | 0)//数据。
}
})
//日志。
console.log(output)
您的问题可以通过使用到达对象
表单
并返回到数组
表单
(假设您发布的0
到360
列表已完成)来解决
有关实际示例,请参见下文
//输入。
常量输入=[
{
“_id”:{
“数据”:“90-180”,
“状态”:“不良”
},
“价值”:1759908
},
{
“_id”:{
“数据”:“360”,
“状态”:“已注销”
},
“价值”:77146
},
{
“_id”:{
“数据”:“360”,
“状态”:“不良”
},
“价值”:280235
},
{
“_id”:{
“数据”:“30-90”,
“状态”:“不合格”
},
“价值”:863825
},
{
“_id”:{
“数据”:“30-90”,
“状态”:“正在执行”
},
“价值”:697370
},
{
“_id”:{
“数据”:“180-360”,
“状态”:“不良”
},
“价值”:890857
},
{
“_id”:{
“数据”:“0-30”,
“状态”:“正在执行”
},
“价值”:1028717
},
{
“_id”:{
“数据”:“0”,
“状态”:“正在执行”
},
“价值”:1941404
}
]
//深度。
常量深度=['0','0-30','30-90','90-180','180-360','360']
//对象形式。
const objectform=input.reduce((累加器,x)=>{
常量{u id,value}=x//\u id.value。
让{data,status}=\u id//status。
status=status.toLowerCase()//小写。
常量点={…累加器[状态],[数据]:值}//数据。
返回{…累加器,[状态]:点}//更新+返回累加器。
}, {})
//输出。
常量输出=Object.keys(objectform).map((key)=>{
返回{
name:key,//name。
数据:depth.map((frame)=>objectform[key][frame]| | 0)//数据。
}
})
//日志。
console.log(output)
看起来您希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只在海报已经试图自己解决问题时才提供帮助。演示这项工作的一个好方法是包括您迄今为止编写的代码、示例输入(如果有)、预期输出和实际获得的输出(控制台输出、回溯等)。你提供的细节越多,你可能得到的答案就越多。检查和。你能详细解释一下为什么数据数组中有6个元素(你说我们最终有6个对象,但我看到4个)吗?而且,你已经问了同样的问题。你试过一些贴出的解决方案吗?我必须承认我有点苦恼,因为我有问题。这就是到目前为止我所拥有的const data=This.chartData let series=Object.values(data.reduce((acc,currVal)=>{acc[currVal.\u id.status]=acc[currVal.\u id.status]|{name:currVal.\u id.status,data:[]};acc[currVal.\u id.status].data.push(currVal.totalBookValue)//将年份转换为数字后将其推送到数据数组返回acc//返回累加器},{})这种方法有效,但它不会将零合并到我的数据数组中。因此,数据数组需要有6个元素,因为它将在HighCharts中填充xAxis。我