javascript - 循环遍历对象中的对象,带点名称并过滤属性 Javascript
问题描述
我有一个包含内容的全局变量(“ccu-192_168_30_22”):
{
"values": {
"VirtualDevices.INT0000001:1.CONTROL_MODE": {
"topic": "",
"payload": 0,
"deviceName": "F2-1315.03"
"datapoint": "CONTROL_MODE",
"room": "F2"
},
"HmIP-RF.00201BE9A13271:1.CONTROL_MODE": {
"topic": "",
"payload": 0,
"deviceName": "F02A-1315.02"
"datapoint": "CONTROL_MODE",
"room": "F02A"
},
"HmIP-RF.00265BE98E8C53:0.UNREACH": {
"topic": "",
"payload": 0,
"deviceName": "F1-1315.01"
"datapoint": "UNREACH",
"room": ""
}
}
}
我想获得一个包含 deviceName 和房间的列表,但只能从带有“datapoint”的对象:“CONTROL_MODE”。这是我的示例代码。
for (var device in global.get("ccu-192_168_30_22").values) {
if (device.datapoint == "CONTROL_MODE") {
list.push(device.deviceName);
list.push(device.room);
}
}
msg.payload = list;
return msg;
但我只得到 msg.payload: array[0]
解决方案
如果您将其缩小为以下形式:
{
"VirtualDevices.INT0000001:1.CONTROL_MODE":{
"topic":"",
"payload":0,
"deviceName":"F2-1315.03",
"datapoint":"CONTROL_MODE",
"room":"F2"
},
"HmIP-RF.00201BE9A13271:1.CONTROL_MODE":{
"topic":"",
"payload":0,
"deviceName":"F02A-1315.02",
"datapoint":"CONTROL_MODE",
"room":"F02A"
},
"HmIP-RF.00265BE98E8C53:0.UNREACH":{
"topic":"",
"payload":0,
"deviceName":"F1-1315.01",
"datapoint":"UNREACH",
"room":""
}
}
你可以这样做:
Object.values(your_data).filter(item => item.datapoint === "CONTROL_MODE");
推荐阅读
- c# - 如何在 .net core 中设置最大 Json 长度
- c++ - 在 VS2017 中搜索内存
- pyspark - 将火花数据框转换为镶木地板
- html - 如何将 svg 背景图像居中?
- powershell - 获取 PowerShell 中格式化表的计数
- java - 为什么 Scanner 类 nextInt()++ 是语法错误?
- xcode - 在 iOS 13 上推送新视图后后退按钮崩溃
- mapbox - Mapbox gl 无法让任何图标与“rocket”以外的“light-v10”一起使用
- blender - 物理模拟的任何帧中物体的位置都不会改变
- ios - 如何在 iOS Swift 中使用段控制从模型中过滤名称、日期?