I am trying transform an array object with input data like this:
var input = [
{ IdDevice: "1", Time: "11:01:00", Data: "1,12,23" },
{ IdDevice: "2", Time: "11:01:11", Data: "30,40,50" },
{ IdDevice: "1", Time: "11:02:00", Data: "5,10,21" },
{ IdDevice: "2", Time: "11:02:11", Data: "32,44,53" },
];
After some transforms:
const convert = (input) =>
Object.entries(
input
.flatMap(({ IdDevice, Data }) =>
Data.split(",").map((x, i) => ({
data: x,
name: `device ${IdDevice} item ${i + 1}`,
}))
)
.reduce(
(a, { data, name }) => (
(a[name] = a[name] || []), a[name].push(data), a
),
{}
)
).map(([name, data]) => ({ data, name }));
var data = convert(input);
I have the result:
[
{ data: [ '1', '5' ], name: 'device 1 item 1' },
{ data: [ '12', '10' ], name: 'device 1 item 2' },
{ data: [ '23', '21' ], name: 'device 1 item 3' },
{ data: [ '30', '32' ], name: 'device 2 item 1' },
{ data: [ '40', '44' ], name: 'device 2 item 2' },
{ data: [ '50', '53' ], name: 'device 2 item 3' }
]
And now I want the final data will depend on "Time" attribute, such as: the data: "1" is in time: "11:01:00" so x:"1", y:"11:01:00" and so on...:
[
{ data: [
{x:'1', y:"11:01:00"},
{x:'5', y:"11:02:00"}
],
name: 'device 1 item 1'
},
{ data: [
{x:'12', y:"11:01:00"},
{x:'10', y:"11:02:00"}
],
name: 'device 1 item 2'
},
...
{ data: [
{x:'40', y:"11:01:11"},
{x:'44', y:"11:02:11"}
],
name: 'device 2 item 2'
},
{ data: [
{x:'50', y:"11:01:11"},
{x:'53', y:"11:02:11"}
],
name: 'device 2 item 3'
}
]
How can I do this?
final data will depend on "Time" attributeis not clear enough.