简体   繁体   English

如何在数组中插入 label 的 object 和值

[英]How to insert object of label and value inside array

I have this data:我有这个数据:

let array = [
  {name:"20220503",num:"0900"}
  {name:"20220503",num:"1500"},{name:"20220503",num:"1700"},
  {name:"20220504",num:"2000"}, {name:"20220505",num:"1100"}, 
  {name:"20220505",num:"1300"}
];
    

I want to make it become like this:我想让它变成这样:

{ 
'20220503':
   { 
     list: [ '0900', '1500', '1700' ],
     data: [
     {
       label: 0900
       value: 0900
     }, 
     {
       label: 1500
       value: 1500
     }, 
     {
       label: 1700
       value: 1700
     }
    ]
   },

'20220504': 
    { 
        list: [ '2000' ],
        data: [
         {
           label: 2000
           value: 2000
         },
        ]
    },

'20220505': 
    { 
    list: [ '1100', '1300' ], 
    data: [
         {
           label: 1100
           value: 1100
         }, 
         {
           label: 1300
           value: 1300
         },
       ]
    }
}

This is what i have done so far:这是我到目前为止所做的:

let array = [
   {date:"20220503",time:"0900"},
    {date:"20220503",time:"1500"},
    {date:"20220503",time:"1700"},
    {date:"20220504",time:"2000"},
    {date:"20220505",time:"1100"},
    {date:"20220505",time:"1300"},
    {date:"20220506",time:"100"},
    {date:"20220507",time:"5300"},
    {date:"20220507",time:"90100"},
    {date:"20220509",time:"2100"}
]
let result = array.reduce((acc,{date,time}) => {
    acc[date] = acc[date] || {list:[], data:[]}
    acc[date].list.push(time)
    acc[date].data.push(time)
    
    return acc;
},{})

console.log(result)

But i only get result like this:但我只得到这样的结果:

{
  '20220503': {
    list: [
      '0900',
      '1500',
      '1700'
    ],
    data: [
      '0900',
      '1500',
      '1700'
    ]
  },
  '20220504': {
    list: [
      '2000'
    ],
    data: [
      '2000'
    ]
  },
  '20220505': {
    list: [
      '1100',
      '1300'
    ],
    data: [
      '1100',
      '1300'
    ]
  },
}

I am using Javascript我正在使用 Javascript

As @ChrisG already pointed out, you just have to change the acc[date].data.push line.正如@ChrisG 已经指出的那样,您只需更改acc[date].data.push行。 And parse the strings into actual numbers:并将字符串解析为实际数字:

 let array = [ {date:"20220503",time:"0900"}, {date:"20220503",time:"1500"}, {date:"20220503",time:"1700"}, {date:"20220504",time:"2000"}, {date:"20220505",time:"1100"}, {date:"20220505",time:"1300"}, {date:"20220506",time:"100"}, {date:"20220507",time:"5300"}, {date:"20220507",time:"90100"}, {date:"20220509",time:"2100"} ] let result = array.reduce((acc,{date,time}) => { acc[date] = acc[date] || {list:[], data:[]} acc[date].list.push(time) acc[date].data.push({ label: Number(time), value: Number(time) }); // <-- here return acc; },{}) console.log(result)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM