首页 > 解决方案 > 循环遍历对象中的对象,带点名称并过滤属性 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]

标签: javascriptjsonobjectfilter

解决方案


如果您将其缩小为以下形式:

{
   "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");

推荐阅读