# \<solved\> Find an object in an array of objects

**URL:** https://discourse.nodered.org/t/solved-find-an-object-in-an-array-of-objects/28384
**Category:** General
**Created:** [16 June 2020 05:37 UTC](https://discourse.nodered.org/t/solved-find-an-object-in-an-array-of-objects/28384 "2020-06-16T05:37:46Z")
**Posts on this page:** 19
**Page:** 1

<div class="post-metadata">

### Author: ![SteveMann](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/stevemann/32/3810_2.png) [@SteveMann](https://discourse.nodered.org/u/SteveMann)
#### Post date: [16 June 2020 05:37 UTC](https://discourse.nodered.org/t/solved-find-an-object-in-an-array-of-objects/28384/1 "2020-06-16T05:37:47Z")

</div>

My goal is to detect when my phone or my wife's phone is at home or not. One way I thought of was to use the ARP node to get all of the IP and MAC addresses in my router's ARP table, then look for our phones.

If there's a better/easier way to determine home or away, please advise me.

I think that I would use the JSONATA node to find a matching IP or MAC, but the data doesn't look right for a JSONATA search. (I have never used JSONATA before). So, how would I determine, for example, if "192.168.1.31" is present?

Here's what my ARP node delivers in msg.payload:

```auto
[
   {
      "ip":"192.168.1.67",
      "mac":"cc:50:e3:0c:6e:00",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.31",
      "mac":"c4:1c:ff:13:9e:61",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.4",
      "mac":"dc:a6:32:09:22:a1",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.42",
      "mac":"bc:dd:c2:25:9a:0f",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.19",
      "mac":"14:91:38:8f:71:68",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.57",
      "mac":"98:5f:d3:e6:aa:9b",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.23",
      "mac":"1c:69:7a:0a:62:c6",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.61",
      "mac":"a4:ba:db:b8:96:45",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.34",
      "mac":"68:54:fd:33:c2:79",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.101",
      "mac":"8c:7f:3b:76:18:c8",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.11",
      "mac":"00:bb:3a:e4:77:0c",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.49",
      "mac":"a0:20:a6:30:de:20",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.204",
      "mac":"60:01:94:86:74:b8",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.49",
      "mac":"a0:20:a6:30:de:20",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.204",
      "mac":"60:01:94:86:74:b8",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.15",
      "mac":"2c:3a:e8:11:8e:2e",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.53",
      "mac":"78:0f:77:5a:e3:f0",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.26",
      "mac":"0c:ee:99:07:df:08",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.41",
      "mac":"ec:fa:bc:06:6d:93",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.30",
      "mac":"dc:a6:32:09:22:a1",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.7",
      "mac":"d0:e7:82:f0:c4:57",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.70",
      "mac":"50:02:91:68:ea:7f",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.18",
      "mac":"ec:fa:bc:06:80:d2",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.56",
      "mac":"dc:ef:ca:bc:96:c3",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.33",
      "mac":"6c:ad:f8:61:b6:ad",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.22",
      "mac":"84:0d:8e:ad:ad:c1",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.37",
      "mac":"b0:35:b5:b6:fe:bd",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.203",
      "mac":"84:0d:8e:44:2f:a2",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.100",
      "mac":"3c:df:a9:6c:bf:de",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.10",
      "mac":"b4:e6:2d:67:b7:d0",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.48",
      "mac":"5c:cf:7f:fa:b7:45",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.230",
      "mac":"00:01:fb:00:1f:41",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.25",
      "mac":"44:65:0d:5f:a5:9d",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.14",
      "mac":"8c:f5:a3:68:55:0f",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.52",
      "mac":"2c:3a:e8:01:1f:0f",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.65",
      "mac":"1c:69:7a:0f:87:76",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.2",
      "mac":"00:d0:2d:43:8d:62",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.17",
      "mac":"60:38:e0:5c:3f:85",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.6",
      "mac":"60:01:94:69:2d:b5",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.21",
      "mac":"9c:8e:cd:0e:98:51",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.59",
      "mac":"50:02:91:69:78:9c",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.32",
      "mac":"50:e5:49:56:4c:87",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.9",
      "mac":"60:01:94:66:ad:29",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.63",
      "mac":"3c:5c:c4:31:59:d5",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.72",
      "mac":"a4:ba:db:b8:96:45",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.36",
      "mac":"cc:50:e3:5b:66:8a",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.202",
      "mac":"60:01:94:ab:45:90",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.13",
      "mac":"30:95:e3:24:03:fd",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.143",
      "mac":"a0:20:a6:0f:38:fa",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.24",
      "mac":"80:7d:3a:7f:e8:f3",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.1",
      "mac":"18:1b:eb:7b:0d:df",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.55",
      "mac":"00:18:dd:06:9a:fd",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.64",
      "mac":"1c:69:7a:0f:87:76",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.131",
      "mac":"b8:27:eb:66:72:3b",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.28",
      "mac":"6c:ad:f8:30:a9:f7",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.5",
      "mac":"60:01:94:51:d1:25",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.43",
      "mac":"a4:ee:57:5b:e2:87",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.16",
      "mac":"60:01:94:69:36:df",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.47",
      "mac":"24:4c:e3:ec:a1:c2",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.20",
      "mac":"5c:cf:7f:b4:61:a3",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.58",
      "mac":"3c:5c:c4:0f:40:8e",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.35",
      "mac":"d8:f1:5b:c6:4f:48",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.201",
      "mac":"60:01:94:ab:53:2b",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.8",
      "mac":"7c:a7:b0:9b:a5:d8",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.62",
      "mac":"10:ae:60:a7:2a:48",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.39",
      "mac":"00:d0:2d:b2:52:c5",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.50",
      "mac":"4c:11:ae:0d:81:ef",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.27",
      "mac":"84:0d:8e:ad:a7:5b",
      "iface":"eth0"
   },
   {
      "ip":"192.168.1.54",
      "mac":"1c:69:7a:0a:62:c6",
      "iface":"eth0"
   }
]

```

---

<div class="post-metadata">

### Author: ![Martin45](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/martin45/32/81884_2.png) [@Martin45](https://discourse.nodered.org/u/Martin45)
#### Post date: [16 June 2020 06:05 UTC](https://discourse.nodered.org/t/solved-find-an-object-in-an-array-of-objects/28384/2 "2020-06-16T06:05:22Z")

</div>

Try this! 🙂

```auto
$[`ip` ~> /192.168.1.31/i]

```

I tested in [https://try.jsonata.org/3oWik6Q\_k](https://try.jsonata.org/3oWik6Q_k).

---

<div class="post-metadata">

### Author: ![ristomatti](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/ristomatti/32/5857_2.png) [@ristomatti](https://discourse.nodered.org/u/ristomatti)
#### Post date: [16 June 2020 06:09 UTC](https://discourse.nodered.org/t/solved-find-an-object-in-an-array-of-objects/28384/3 "2020-06-16T06:09:31Z")

</div>

Another way:

```auto
'192.168.1.31' in payload.ip

```

Example flow:

```auto
[{"id":"f6a9b90c.76b6e8","type":"switch","z":"1d2ad601.7d596a","name":"","property":"payload","propertyType":"msg","rules":[{"t":"jsonata_exp","v":"'192.168.1.31' in payload.ip","vt":"jsonata"}],"checkall":"true","repair":false,"outputs":1,"x":230,"y":60,"wires":[["34f6bd9e.cef3a2"]]},{"id":"aff7e53b.985338","type":"inject","z":"1d2ad601.7d596a","name":"","topic":"","payload":"[{\"ip\":\"192.168.1.67\",\"mac\":\"cc:50:e3:0c:6e:00\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.31\",\"mac\":\"c4:1c:ff:13:9e:61\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.4\",\"mac\":\"dc:a6:32:09:22:a1\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.42\",\"mac\":\"bc:dd:c2:25:9a:0f\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.19\",\"mac\":\"14:91:38:8f:71:68\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.57\",\"mac\":\"98:5f:d3:e6:aa:9b\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.23\",\"mac\":\"1c:69:7a:0a:62:c6\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.61\",\"mac\":\"a4:ba:db:b8:96:45\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.34\",\"mac\":\"68:54:fd:33:c2:79\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.101\",\"mac\":\"8c:7f:3b:76:18:c8\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.11\",\"mac\":\"00:bb:3a:e4:77:0c\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.49\",\"mac\":\"a0:20:a6:30:de:20\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.204\",\"mac\":\"60:01:94:86:74:b8\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.49\",\"mac\":\"a0:20:a6:30:de:20\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.204\",\"mac\":\"60:01:94:86:74:b8\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.15\",\"mac\":\"2c:3a:e8:11:8e:2e\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.53\",\"mac\":\"78:0f:77:5a:e3:f0\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.26\",\"mac\":\"0c:ee:99:07:df:08\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.41\",\"mac\":\"ec:fa:bc:06:6d:93\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.30\",\"mac\":\"dc:a6:32:09:22:a1\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.7\",\"mac\":\"d0:e7:82:f0:c4:57\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.70\",\"mac\":\"50:02:91:68:ea:7f\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.18\",\"mac\":\"ec:fa:bc:06:80:d2\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.56\",\"mac\":\"dc:ef:ca:bc:96:c3\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.33\",\"mac\":\"6c:ad:f8:61:b6:ad\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.22\",\"mac\":\"84:0d:8e:ad:ad:c1\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.37\",\"mac\":\"b0:35:b5:b6:fe:bd\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.203\",\"mac\":\"84:0d:8e:44:2f:a2\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.100\",\"mac\":\"3c:df:a9:6c:bf:de\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.10\",\"mac\":\"b4:e6:2d:67:b7:d0\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.48\",\"mac\":\"5c:cf:7f:fa:b7:45\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.230\",\"mac\":\"00:01:fb:00:1f:41\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.25\",\"mac\":\"44:65:0d:5f:a5:9d\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.14\",\"mac\":\"8c:f5:a3:68:55:0f\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.52\",\"mac\":\"2c:3a:e8:01:1f:0f\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.65\",\"mac\":\"1c:69:7a:0f:87:76\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.2\",\"mac\":\"00:d0:2d:43:8d:62\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.17\",\"mac\":\"60:38:e0:5c:3f:85\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.6\",\"mac\":\"60:01:94:69:2d:b5\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.21\",\"mac\":\"9c:8e:cd:0e:98:51\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.59\",\"mac\":\"50:02:91:69:78:9c\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.32\",\"mac\":\"50:e5:49:56:4c:87\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.9\",\"mac\":\"60:01:94:66:ad:29\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.63\",\"mac\":\"3c:5c:c4:31:59:d5\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.72\",\"mac\":\"a4:ba:db:b8:96:45\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.36\",\"mac\":\"cc:50:e3:5b:66:8a\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.202\",\"mac\":\"60:01:94:ab:45:90\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.13\",\"mac\":\"30:95:e3:24:03:fd\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.143\",\"mac\":\"a0:20:a6:0f:38:fa\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.24\",\"mac\":\"80:7d:3a:7f:e8:f3\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.1\",\"mac\":\"18:1b:eb:7b:0d:df\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.55\",\"mac\":\"00:18:dd:06:9a:fd\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.64\",\"mac\":\"1c:69:7a:0f:87:76\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.131\",\"mac\":\"b8:27:eb:66:72:3b\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.28\",\"mac\":\"6c:ad:f8:30:a9:f7\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.5\",\"mac\":\"60:01:94:51:d1:25\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.43\",\"mac\":\"a4:ee:57:5b:e2:87\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.16\",\"mac\":\"60:01:94:69:36:df\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.47\",\"mac\":\"24:4c:e3:ec:a1:c2\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.20\",\"mac\":\"5c:cf:7f:b4:61:a3\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.58\",\"mac\":\"3c:5c:c4:0f:40:8e\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.35\",\"mac\":\"d8:f1:5b:c6:4f:48\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.201\",\"mac\":\"60:01:94:ab:53:2b\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.8\",\"mac\":\"7c:a7:b0:9b:a5:d8\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.62\",\"mac\":\"10:ae:60:a7:2a:48\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.39\",\"mac\":\"00:d0:2d:b2:52:c5\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.50\",\"mac\":\"4c:11:ae:0d:81:ef\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.27\",\"mac\":\"84:0d:8e:ad:a7:5b\",\"iface\":\"eth0\"},{\"ip\":\"192.168.1.54\",\"mac\":\"1c:69:7a:0a:62:c6\",\"iface\":\"eth0\"}]","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":90,"y":60,"wires":[["f6a9b90c.76b6e8"]]},{"id":"34f6bd9e.cef3a2","type":"debug","z":"1d2ad601.7d596a","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":390,"y":60,"wires":[]}]

```

But wouldn't it make more sense to compare to the MAC address so no need to assign an IP in the router?

For me an ARP check has worked almost flawlessly to detect if me or my girlfriend is at home for 2 years. I use it to turn off the lights when both of us have left the apartment. We both use Android phones which make a difference. Some here have complained it doesn't work for them.

---

<div class="post-metadata">

### Author: ![Colin](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/colin/32/17040_2.png) [@Colin](https://discourse.nodered.org/u/Colin)
#### Post date: [16 June 2020 06:13 UTC](https://discourse.nodered.org/t/solved-find-an-object-in-an-array-of-objects/28384/4 "2020-06-16T06:13:55Z")

</div>

I think you will find that ARP is not sufficiently reliable. There have been many threads here on how to detect presence and no real conclusion on the best way to do it.  
I do it by determining whether the phone is connected to the WiFi, by using fixed IP addresses and ping. Even that is not perfect as a phone that has not been used for a while may go to sleep and fail to connect for some time after arrival. The technique has become less perfect over time as phones have become more aggressive at saving battery usage.

---

<div class="post-metadata">

### Author: ![ristomatti](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/ristomatti/32/5857_2.png) [@ristomatti](https://discourse.nodered.org/u/ristomatti)
#### Post date: [16 June 2020 06:21 UTC](https://discourse.nodered.org/t/solved-find-an-object-in-an-array-of-objects/28384/5 "2020-06-16T06:21:54Z")

</div>

Both me and my girlfriend have a relatively new Android phone (Samsung Galaxy S9 and S10) and it's worked 100% if both have WiFi enabled. So it's definitely worth a shot. I have a delay of 5 or 10 minutes to check the availability of a phone.  
I've also setup a similar thing to state trail which displays a time line of both our presence and it can show a continuous "home" status days on end (during the corona situation for example).

---

<div class="post-metadata">

### Author: ![janvda](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/janvda/32/234_2.png) [@janvda](https://discourse.nodered.org/u/janvda)
#### Post date: [16 June 2020 07:07 UTC](https://discourse.nodered.org/t/solved-find-an-object-in-an-array-of-objects/28384/6 "2020-06-16T07:07:04Z")

</div>

Following jsonata query also does the job:

```auto
$[ip = '192.168.1.31']

```

---

<div class="post-metadata">

### Author: ![SteveMann](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/stevemann/32/3810_2.png) [@SteveMann](https://discourse.nodered.org/u/SteveMann)
#### Post date: [16 June 2020 12:18 UTC](https://discourse.nodered.org/t/solved-find-an-object-in-an-array-of-objects/28384/7 "2020-06-16T12:18:49Z")

</div>

Thanks. I would hope it's that easy, but my payload is an array of objects. There is no payload.ip  
How do you detect the MAC address in your setup? Like I said, I'm not committed to any method at this time.

---

<div class="post-metadata">

### Author: ![hotNipi](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/hotnipi/32/383_2.png) [@hotNipi](https://discourse.nodered.org/u/hotNipi)
#### Post date: [16 June 2020 12:42 UTC](https://discourse.nodered.org/t/solved-find-an-object-in-an-array-of-objects/28384/8 "2020-06-16T12:42:01Z")

</div>

jsonata is fancy but it is easy enough to do with plain JavaScript.

```auto
var ipToSearch = "192.168.1.31"

var found = msg.payload.find(element => element.ip === ipToSearch)// returns object if exists, undefined otherwise
if(found){
    msg.payload = found
    return msg;  
}else{
    node.warn(ipToSearch+" is not found")
}

```

or with split and change nodes

```auto
[{"id":"39d57941.2edb76","type":"function","z":"94f3e22a.5d351","name":"","func":"var p = [\n {\n \"ip\":\"192.168.1.67\",\n \"mac\":\"cc:50:e3:0c:6e:00\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.31\",\n \"mac\":\"c4:1c:ff:13:9e:61\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.4\",\n \"mac\":\"dc:a6:32:09:22:a1\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.42\",\n \"mac\":\"bc:dd:c2:25:9a:0f\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.19\",\n \"mac\":\"14:91:38:8f:71:68\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.57\",\n \"mac\":\"98:5f:d3:e6:aa:9b\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.23\",\n \"mac\":\"1c:69:7a:0a:62:c6\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.61\",\n \"mac\":\"a4:ba:db:b8:96:45\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.34\",\n \"mac\":\"68:54:fd:33:c2:79\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.101\",\n \"mac\":\"8c:7f:3b:76:18:c8\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.11\",\n \"mac\":\"00:bb:3a:e4:77:0c\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.49\",\n \"mac\":\"a0:20:a6:30:de:20\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.204\",\n \"mac\":\"60:01:94:86:74:b8\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.49\",\n \"mac\":\"a0:20:a6:30:de:20\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.204\",\n \"mac\":\"60:01:94:86:74:b8\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.15\",\n \"mac\":\"2c:3a:e8:11:8e:2e\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.53\",\n \"mac\":\"78:0f:77:5a:e3:f0\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.26\",\n \"mac\":\"0c:ee:99:07:df:08\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.41\",\n \"mac\":\"ec:fa:bc:06:6d:93\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.30\",\n \"mac\":\"dc:a6:32:09:22:a1\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.7\",\n \"mac\":\"d0:e7:82:f0:c4:57\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.70\",\n \"mac\":\"50:02:91:68:ea:7f\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.18\",\n \"mac\":\"ec:fa:bc:06:80:d2\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.56\",\n \"mac\":\"dc:ef:ca:bc:96:c3\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.33\",\n \"mac\":\"6c:ad:f8:61:b6:ad\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.22\",\n \"mac\":\"84:0d:8e:ad:ad:c1\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.37\",\n \"mac\":\"b0:35:b5:b6:fe:bd\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.203\",\n \"mac\":\"84:0d:8e:44:2f:a2\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.100\",\n \"mac\":\"3c:df:a9:6c:bf:de\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.10\",\n \"mac\":\"b4:e6:2d:67:b7:d0\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.48\",\n \"mac\":\"5c:cf:7f:fa:b7:45\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.230\",\n \"mac\":\"00:01:fb:00:1f:41\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.25\",\n \"mac\":\"44:65:0d:5f:a5:9d\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.14\",\n \"mac\":\"8c:f5:a3:68:55:0f\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.52\",\n \"mac\":\"2c:3a:e8:01:1f:0f\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.65\",\n \"mac\":\"1c:69:7a:0f:87:76\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.2\",\n \"mac\":\"00:d0:2d:43:8d:62\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.17\",\n \"mac\":\"60:38:e0:5c:3f:85\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.6\",\n \"mac\":\"60:01:94:69:2d:b5\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.21\",\n \"mac\":\"9c:8e:cd:0e:98:51\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.59\",\n \"mac\":\"50:02:91:69:78:9c\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.32\",\n \"mac\":\"50:e5:49:56:4c:87\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.9\",\n \"mac\":\"60:01:94:66:ad:29\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.63\",\n \"mac\":\"3c:5c:c4:31:59:d5\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.72\",\n \"mac\":\"a4:ba:db:b8:96:45\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.36\",\n \"mac\":\"cc:50:e3:5b:66:8a\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.202\",\n \"mac\":\"60:01:94:ab:45:90\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.13\",\n \"mac\":\"30:95:e3:24:03:fd\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.143\",\n \"mac\":\"a0:20:a6:0f:38:fa\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.24\",\n \"mac\":\"80:7d:3a:7f:e8:f3\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.1\",\n \"mac\":\"18:1b:eb:7b:0d:df\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.55\",\n \"mac\":\"00:18:dd:06:9a:fd\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.64\",\n \"mac\":\"1c:69:7a:0f:87:76\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.131\",\n \"mac\":\"b8:27:eb:66:72:3b\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.28\",\n \"mac\":\"6c:ad:f8:30:a9:f7\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.5\",\n \"mac\":\"60:01:94:51:d1:25\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.43\",\n \"mac\":\"a4:ee:57:5b:e2:87\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.16\",\n \"mac\":\"60:01:94:69:36:df\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.47\",\n \"mac\":\"24:4c:e3:ec:a1:c2\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.20\",\n \"mac\":\"5c:cf:7f:b4:61:a3\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.58\",\n \"mac\":\"3c:5c:c4:0f:40:8e\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.35\",\n \"mac\":\"d8:f1:5b:c6:4f:48\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.201\",\n \"mac\":\"60:01:94:ab:53:2b\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.8\",\n \"mac\":\"7c:a7:b0:9b:a5:d8\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.62\",\n \"mac\":\"10:ae:60:a7:2a:48\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.39\",\n \"mac\":\"00:d0:2d:b2:52:c5\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.50\",\n \"mac\":\"4c:11:ae:0d:81:ef\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.27\",\n \"mac\":\"84:0d:8e:ad:a7:5b\",\n \"iface\":\"eth0\"\n },\n {\n \"ip\":\"192.168.1.54\",\n \"mac\":\"1c:69:7a:0a:62:c6\",\n \"iface\":\"eth0\"\n }\n]\nmsg.payload = p\nreturn msg;","outputs":1,"noerr":0,"x":310,"y":280,"wires":[["9ba70e96.98a9d","4443f46a.0a113c"]]},{"id":"8801ffd1.1b616","type":"inject","z":"94f3e22a.5d351","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":160,"y":280,"wires":[["39d57941.2edb76"]]},{"id":"9ba70e96.98a9d","type":"function","z":"94f3e22a.5d351","name":"","func":"var ipToSearch = \"192.168.1.31\"\n\nvar found = msg.payload.find(element => element.ip === ipToSearch)// returns object if exists, undefined otherwise\nif(found){\n msg.payload = found\n return msg; \n}else{\n node.warn(ipToSearch+\" is not found\")\n}\n","outputs":1,"noerr":0,"x":450,"y":240,"wires":[["b4b8c730.eb1218"]]},{"id":"b4b8c730.eb1218","type":"debug","z":"94f3e22a.5d351","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":630,"y":240,"wires":[]},{"id":"56dcfafb.27b7f4","type":"switch","z":"94f3e22a.5d351","name":"","property":"payload.ip","propertyType":"msg","rules":[{"t":"eq","v":"192.168.1.31","vt":"str"},{"t":"eq","v":"192.168.1.32","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":570,"y":300,"wires":[["fe3d2b2.a9ed9d8"],["865f4948.1202e8"]]},{"id":"4443f46a.0a113c","type":"split","z":"94f3e22a.5d351","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":450,"y":300,"wires":[["56dcfafb.27b7f4"]]},{"id":"fe3d2b2.a9ed9d8","type":"debug","z":"94f3e22a.5d351","name":"31","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":690,"y":280,"wires":[]},{"id":"865f4948.1202e8","type":"debug","z":"94f3e22a.5d351","name":"32","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":690,"y":320,"wires":[]}]

```

---

<div class="post-metadata">

### Author: ![ristomatti](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/ristomatti/32/5857_2.png) [@ristomatti](https://discourse.nodered.org/u/ristomatti)
#### Post date: [16 June 2020 13:12 UTC](https://discourse.nodered.org/t/solved-find-an-object-in-an-array-of-objects/28384/9 "2020-06-16T13:12:19Z")

</div>

Did you import my test flow? It has an inject node with the data you described. How it works is that JSONata creates a new array with only all the ip's from the result then evaluates the check if the given ip is on the array of ip numbers.

This was a useful question btw! I didn't know the answer so it made me look up the documentation and learn something new. 🙂

---

<div class="post-metadata">

### Author: ![ristomatti](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/ristomatti/32/5857_2.png) [@ristomatti](https://discourse.nodered.org/u/ristomatti)
#### Post date: [16 June 2020 13:18 UTC](https://discourse.nodered.org/t/solved-find-an-object-in-an-array-of-objects/28384/10 "2020-06-16T13:18:39Z")

</div>

I'm really on the borderline if I like the expressiveness of JSONata or if there's too much magic going on to render the expression incomprehensible in a few months time. 😁

---

<div class="post-metadata">

### Author: ![SteveMann](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/stevemann/32/3810_2.png) [@SteveMann](https://discourse.nodered.org/u/SteveMann)
#### Post date: [16 June 2020 13:18 UTC](https://discourse.nodered.org/t/solved-find-an-object-in-an-array-of-objects/28384/11 "2020-06-16T13:18:40Z")

</div>

Thank you everyone for your suggestions. I learned something from each of you.

My (complete??) solution is to feed the output of ARP node into a function like HotNipi suggested, except to search for the MAC address, and return a msg of true or false, which is then selected in a switch node.

```auto
var macToSearch = "c4:1c:ff:13:9e:60";

var found = msg.payload.find(element => element.mac === macToSearch); // returns object if exists, undefined otherwise
if(found){
    msg.payload = true;
}else{
    node.warn(macToSearch+" is not found");
    msg.payload = false;
}
return msg;

```

 ![present](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/7/d/7d13c710922268d4cf9d456f09b619a5c114de3b.jpeg)

---

<div class="post-metadata">

### Author: ![ristomatti](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/ristomatti/32/5857_2.png) [@ristomatti](https://discourse.nodered.org/u/ristomatti)
#### Post date: [16 June 2020 13:21 UTC](https://discourse.nodered.org/t/solved-find-an-object-in-an-array-of-objects/28384/12 "2020-06-16T13:21:24Z")

</div>

Great that you got it working! Note that my suggestion `'192.168.1.31' in payload.ip` as well as the other JSONata suggestions also return true/false if you put them in a change node (set msg.payload to expression).

But most important in the end is that you understand how the code/expression works so a JavaScript snippet is better if you feel it's easier to understand later on.

---

<div class="post-metadata">

### Author: ![SteveMann](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/stevemann/32/3810_2.png) [@SteveMann](https://discourse.nodered.org/u/SteveMann)
#### Post date: [16 June 2020 13:26 UTC](https://discourse.nodered.org/t/solved-find-an-object-in-an-array-of-objects/28384/13 "2020-06-16T13:26:05Z")

</div>

I tried your test flow, but all I got was "payload: array[71], jsonataStatus: "Invalid JSON string ([object O…" }"

As I said, the output of the ARP node didn't look like JSON data, but I am just barely understanding JSON, so JSONATA is still beyond my grasp at this time.

But, from your suggestion, I did switch my search to the MAC address.

---

<div class="post-metadata">

### Author: ![ristomatti](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/ristomatti/32/5857_2.png) [@ristomatti](https://discourse.nodered.org/u/ristomatti)
#### Post date: [16 June 2020 13:33 UTC](https://discourse.nodered.org/t/solved-find-an-object-in-an-array-of-objects/28384/14 "2020-06-16T13:33:41Z")

</div>

And for the record - I also used JavaScript on my own solution as I hadn't taken the time to get into JSONata yet. It seems I've wanted to go all fancy and experiment with functional programming and Ramda JavaScript library. 😂

```auto
const R = global.get('ramda');
const { payload } = msg;

const ristomatti = '08:c5:e1:xx:xx:xx';
const riia = '8c:b8:4a:xx:xx:xx';

const macMatches = R.curry((mac, arp) => arp.mac === mac);
const found = R.curry(mac => R.any(macMatches(mac), payload));

return [
  { payload: found(ristomatti) },
  { payload: found(riia) },
  { 
    payload: {
      ristomatti: found(ristomatti),
      riia: found(riia)
    }
  }
];

```

This creates a payload to 3 outputs two of which I use to draw the presence graphs and one that is used to check if both is away. I don't remember why I didn't just send a true/false on the third output but what is done is done. 😀

---

<div class="post-metadata">

### Author: ![ristomatti](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/ristomatti/32/5857_2.png) [@ristomatti](https://discourse.nodered.org/u/ristomatti)
#### Post date: [16 June 2020 13:36 UTC](https://discourse.nodered.org/t/solved-find-an-object-in-an-array-of-objects/28384/15 "2020-06-16T13:36:17Z")

</div>

That is strange as I tested it... Which Node-RED version are you running? Did it fail with that error already in my example flow or with the actual data from the arp node?

---

<div class="post-metadata">

### Author: ![SteveMann](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/stevemann/32/3810_2.png) [@SteveMann](https://discourse.nodered.org/u/SteveMann)
#### Post date: [16 June 2020 13:47 UTC](https://discourse.nodered.org/t/solved-find-an-object-in-an-array-of-objects/28384/16 "2020-06-16T13:47:50Z")

</div>

It's Version 0.17.5  
I know it's old, but every time I upgrade Node Red, something breaks. On the other hand, this is my test installation on a Raspberry Pi. I like to test things here so that if I really screw it up, my main Node-Red on an Intel NUC running Ubuntu is not affected.

It wouldn't hurt to try a version upgrade on the Raspberry, but first, I'll copy the Micro SD.

My main Node-Red is Version 1.0.6, and this is where the working flows will be located.

I was using the msg.payload data from the ARP.

---

<div class="post-metadata">

### Author: ![ristomatti](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/ristomatti/32/5857_2.png) [@ristomatti](https://discourse.nodered.org/u/ristomatti)
#### Post date: [16 June 2020 13:51 UTC](https://discourse.nodered.org/t/solved-find-an-object-in-an-array-of-objects/28384/17 "2020-06-16T13:51:40Z")

</div>

> [@SteveMann](#):
>
> It's Version 0.17.5

Ok my guess is that it bundles a too old version of JSONata which could explain why it didn't work out.

---

<div class="post-metadata">

### Author: ![SteveMann](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/stevemann/32/3810_2.png) [@SteveMann](https://discourse.nodered.org/u/SteveMann)
#### Post date: [16 June 2020 14:17 UTC](https://discourse.nodered.org/t/solved-find-an-object-in-an-array-of-objects/28384/18 "2020-06-16T14:17:13Z")

</div>

I tried again on the Version 1.0.6 NR, same "Invalid JSON String".  
But, I have a working function now. Thanks for the help.

---

<div class="post-metadata">

### Author: ![system](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/1X/d073cd938eafa2e558d7c2cd59003b3ef4963033.png) [@system](https://discourse.nodered.org/u/system)
#### Post date: [15 August 2020 14:17 UTC](https://discourse.nodered.org/t/solved-find-an-object-in-an-array-of-objects/28384/19 "2020-08-15T14:17:20Z")

</div>

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.
