我试图找到每个通道的总和来获得energy_ac的总能量。这是映射。
var mappings = [
{
floor: 13,
name: 1301,
room_type: 'room',
energy_ac: [
{deviceId: 15062, channels: ['ct1']},
{deviceId: 15063, channels: ['ct1', 'ct2', 'ct3']}
],
energy_light: [
{deviceId: 15062, channels: ['ct4']}
],
energy_socket1: [
{deviceId: 15062, channels: ['ct5']}
],
energy_socket2: [
{deviceId: 15062, channels: ['ct5']}
]
} ];
这是数据:
data = { '15062':
{ _id: 550fea1b46758f1505dd70c7,
deviceId: '15062',
link: 'http://egauge15062.egaug.es/cgi-bin/egauge-show?S&s=0&n=6&C&Z=LST-8',
timestamp: 1427106327,
ct1: 34,
ct2: 0,
ct3: 7,
ct4: 572,
ct5: 527 },
'15063':
{ _id: 550fea1b46758f1505dd70c8,
deviceId: '15063',
link: 'http://egauge15062.egaug.es/cgi-bin/egauge-show?S&s=0&n=6&C&Z=LST-8',
timestamp: 1427106327,
ct1: 34,
ct2: 0,
ct3: 7,
ct4: 572,
ct5: 527 },
'15064':
{ _id: 550fea1b46758f1505dd70c9,
deviceId: '15064',
link: 'http://egauge15062.egaug.es/cgi-bin/egauge-show?S&s=0&n=6&C&Z=LST-8',
timestamp: 1427106327,
ct1: 34,
ct2: 0,
ct3: 7,
ct4: 572,
ct5: 527 },
'15065':
{ _id: 550fea1b46758f1505dd70ca,
deviceId: '15065',
link: 'http://egauge15062.egaug.es/cgi-bin/egauge-show?S&s=0&n=6&C&Z=LST-8',
timestamp: 1427106327,
ct1: 34,
ct2: 0,
ct3: 7,
ct4: 572,
ct5: 527 } }
这是我的代码:
mappings.forEach(function(room) {
var hash = {};
hash.floor = room.floor;
hash.name = room.name;
hash.room_type = room.room_type;
hash.energy_ac = 0;
room.energy_ac.forEach(function(device) {
device.channels.forEach(function(channel){
hash.energy_ac += room[device][channel];
});
});
房间[设备] [频道]对我不起作用。我也试过房间[设备] .channel。我不确定如何获得频道的价值。任何帮助将不胜感激。
答案 0 :(得分:1)
设备嵌套在energy_ac中,因此您无法直接从房间访问它。您需要执行room.energy_ac[device].channels[channel]
之类的操作。这仍然无法正常工作,因为通道不是数组的索引,它是当前项目,即通道值。您真正需要做的就是运行hash.energy_ac += channel
,因为频道是您想要添加的号码。
答案 1 :(得分:1)
我认为这里的主要问题是你试图从device
对象中获取能量,当它实际存储在data
对象中时。您需要索引到data
对象的键存储在device
中。
假设您想要每个房间的总energy_ac,您需要做的是:
for each room:
set hash.energy_ac = 0
for each device in room's energy_ac:
for each channel in this device:
add the energy of this device and channel to hash.energy_ac
因此,对于mappings
(1301)中的一个房间,energy_ac
应为75.其energy_ac
由设备15062组成:频道ct1(34),以及设备15063:通道ct1(34)+ ct2(0)+ ct3(7)。 34 + 34 + 7 = 75。
这是一个JSFiddle(我认为是)你想要的实现。
此外,由于_id
值不是字符串,我收到了控制台错误。