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
As @ChrisG already pointed out, you just have to change the acc[date].data.push
line. 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)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.