对象数组中的组元素 Javascript
Group element in object array Javascript
我正在尝试使用这样的输入数据转换数组对象:
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" },
];
经过一些变换:
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);
我有结果:
[
{ 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' }
]
现在我想要最终的数据将取决于“时间”属性,例如:数据:“1”是在时间:“11:01:00”所以 x:"1", y:"11:01:00" 等等...:[=15=]
[
{ 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'
}
]
我该怎么做?
这是一个非常简单的答案,也许不是你想要的,但我相信给出了你想要的最终答案。
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"
},
];
const convert = (input) =>
Object.entries(
input
.flatMap(({
IdDevice,
Data,
Time
}) =>
Data.split(",").map((x, i) => ({
data: x,
name: `device ${IdDevice} item ${i + 1}`,
time: Time
}))
)
.reduce(
(a, {
data,
name,
time
}) => (
(a[name] = a[name] || []), a[name].push({
x: data,
y: time
}), a
), {}
)
).map(([name, data]) => ({
data,
name
}));
var data = convert(input);
console.log(data)
输出:
[
{
"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": "23",
"y": "11:01:00"
},
{
"x": "21",
"y": "11:02:00"
}
],
"name": "device 1 item 3"
},
{
"data": [
{
"x": "30",
"y": "11:01:11"
},
{
"x": "32",
"y": "11:02:11"
}
],
"name": "device 2 item 1"
},
{
"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"
}
]
我正在尝试使用这样的输入数据转换数组对象:
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" },
];
经过一些变换:
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);
我有结果:
[
{ 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' }
]
现在我想要最终的数据将取决于“时间”属性,例如:数据:“1”是在时间:“11:01:00”所以 x:"1", y:"11:01:00" 等等...:[=15=]
[
{ 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'
}
]
我该怎么做?
这是一个非常简单的答案,也许不是你想要的,但我相信给出了你想要的最终答案。
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"
},
];
const convert = (input) =>
Object.entries(
input
.flatMap(({
IdDevice,
Data,
Time
}) =>
Data.split(",").map((x, i) => ({
data: x,
name: `device ${IdDevice} item ${i + 1}`,
time: Time
}))
)
.reduce(
(a, {
data,
name,
time
}) => (
(a[name] = a[name] || []), a[name].push({
x: data,
y: time
}), a
), {}
)
).map(([name, data]) => ({
data,
name
}));
var data = convert(input);
console.log(data)
输出:
[
{
"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": "23",
"y": "11:01:00"
},
{
"x": "21",
"y": "11:02:00"
}
],
"name": "device 1 item 3"
},
{
"data": [
{
"x": "30",
"y": "11:01:11"
},
{
"x": "32",
"y": "11:02:11"
}
],
"name": "device 2 item 1"
},
{
"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"
}
]