Javascript 将Json中的数据过滤到可在HighChartsJs中使用的新数组

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',

我目前正在与HighCharts JS合作。对于要在HighCharts中显示的数据,我必须拥有以下最终数据:

[
  {
    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。我