对象数组中的组元素 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"
  }
]