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