Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将嵌套对象映射到数组_Javascript_Arrays_Javascript Objects - Fatal编程技术网

Javascript 将嵌套对象映射到数组

Javascript 将嵌套对象映射到数组,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,为了解决这个问题,我一整天都把头撞在墙上,而且在这里搜索,到目前为止我什么也没找到 我当前从API返回的对象的结构是这样的,每个设备有2000多个数据点: { "DeviceA": [ { "device_id": "DeviceA", "time": "2021-01-23T18:43:14Z", "temperature": 1

为了解决这个问题,我一整天都把头撞在墙上,而且在这里搜索,到目前为止我什么也没找到

我当前从API返回的对象的结构是这样的,每个设备有2000多个数据点:

{ "DeviceA": [

     {  "device_id": "DeviceA",
        "time": "2021-01-23T18:43:14Z",
        "temperature": 1.875,
        "strength": -14.827574,
        "maturity": 105.904513
     },
     {  "device_id": "ExampleB",
        "time": "2021-01-23T18:53:14Z",
        "temperature": 1.35,
        "strength": -145.64274540827574,
        "maturity": 10.904513
     },
             ]

 "DeviceB": [
     {  "device_id": "DeviceB",
        "time": "2021-01-23T18:43:14Z",
        "temperature": 1.5,
        "strength": -120.64274540827574,
        "maturity": 3233.04513
     },
     {  "device_id": "ExampleB",
        "time": "2021-01-23T18:53:14Z",
        "temperature": 1.875,
        "strength": -17.4274540827574,
        "maturity": 10554.268851904513
     },
}
我多么想要它

[
  {
    "id": "DeviceA"
    "Data": [
      {
         "x": "time"
         "y": "temperature"
      }
     ]
  }
  {
    "id": "DeviceB"
    "Data": [
      {
         "x": "time"
         "y": "temperature"
      }
     ]
  }
]
我已经尝试过嵌套映射数组,但我永远无法获得正确的输出。任何帮助都将不胜感激

编辑:

抱歉,我没有为我正在进行的工作包含一些代码

  const graphAllTempVTime = () => {
const sensorTempVTimeMapped = Object.entries(sensorDatasFromCast).map(
  (items, index) => ({
    id: items[0],
    data: [
      {
        x: items[1].time,
        y: items[1].temperature,
      },
    ],
  })
)

return sensorTempVTimeMapped
}
但是,这会产生以下输出:

您可以使用:它将获取一个对象(如第一个示例)并以数组形式返回键,从那里您可以遍历每个键并转换每个值。您还可以检查它是否更新,以便了解平台支持

如果你发布一些你正在尝试的代码,也许社区会发现一个修复方案,这会很有帮助

const newArr = []

Object.keys(myObject).map((key, index) => {
  newArr.push(
  {
    id: key,
    Data: [
      {
        x: myObject[key][0].time,
        y: myObject[key][0].temperature,
      }
    ],
  }
  )
});

上面提到了一些非常简单的入门方法,但这是JS中的经典函数编程问题。像这样的问题让我的一天变得有趣

Object.keys(THE_OBEJCT)
  .map(name =>
    THE_OBEJCT[name].map(device => ({
      id: name,
      Data: THE_OBEJCT[name].map(device => ({
        time: device.time,
        temperature: device.temperature
      }))
    }))
  )
  .map(d =>
    d.reduce((memo, d) => ({ id: d.id, data: memo.data.concat(d.Data) }), {
      data: []
    })
  )

非常基本,但将创建一个如下所示的对象数组


您需要映射每个键的值

let o={“DeviceA”:[{“device_id”:“DeviceA”,“time”:“2021-01-23T18:43:14Z”,“temperature”:1.875,“strength”:-14.827574,“maturity”:105.904513},{“device_id”:“ExampleB”,“time”:“2021-01-23T18:53:14Z”,“temperature”:1.35,“strength”:-145.642745540827574,“maturity”:10.904513},]”,“DeviceB”:“device id”:“DeviceB”,“time”:“DeviceB”,“time”:“2021-01-23T18:43:14Z”,“温度”:1.5,“强度”:-120.64274540827574,“成熟度”:3233.04513},{“设备id”:“示例B”,“时间”:“2021-01-23T18:53:14Z”,“温度”:1.875,“强度”:-17.4274540827574,“成熟度”:10554.268851904513};
const res=Object.entries(o.map)(
([key,val],index)=>({
id:钥匙,
数据:val.map(x=>({x:x.time,y:x.temperature}))
})
)

console.log(res)
请确保我没有弄错。因此,您的API推出的是一个巨大的对象,而不是一个包含对象的数组?是的,没错。顶层是一个对象。对于缺少代码,我现在已经添加了它,感谢您的建议。别担心。我发现已经有人试图帮助您,我的下一个建议是在您的电脑上解决这个问题你自己的。这是一件很简单的事情,一旦你做对了,看到其他答案,你可以看到其他人在尝试什么,你可以用它来解决你自己的问题。在我看来,如果有人给你一个工作代码,你只需复制/粘贴,那么你就会错过学习的机会。谢谢,但我真的不理解这个的输出呢?它似乎只输出一个小数组=[1,2]这非常感谢。但是我没有得到与您相同的输出,您所得到的是正确的。这是我得到的输出:您想要数据作为数组或对象吗?我觉得id需要在第二个映射之外,以便只有一个id,然后在下一个数组中有数据。这就是它的外观,想象一下还有多个其他设备如图中所示,ets只有一个。好的,我更新了我认为你想要的。它可能更干净,但你可以这样做了……这非常有效,是迄今为止执行速度最快的答案!非常感谢!!@AndreaCorrado乐于帮助。