# JSONATA - soting on multiple fields of objects in an array

**URL:** <https://discourse.nodered.org/t/jsonata-soting-on-multiple-fields-of-objects-in-an-array/33852>\
**Category:** General\
**Created:** [6 October 2020 19:14 UTC](https://discourse.nodered.org/t/jsonata-soting-on-multiple-fields-of-objects-in-an-array/33852 "2020-10-06T19:14:28Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![IoTPlay](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/iotplay/32/40_2.png) [@IoTPlay](https://discourse.nodered.org/u/IoTPlay)\
**Post date:** [6 October 2020 19:14 UTC](https://discourse.nodered.org/t/jsonata-soting-on-multiple-fields-of-objects-in-an-array/33852/1 "2020-10-06T19:14:29Z")

</div>

Hi, me and JSONATA again....

I can sort on a field within an array. Now I want to sort on multiple fields. This is failing.

So, firstly, the array...

```auto
[
{"taskName":"Leg2","prio":2,"startAfter":"11h00"},
{"taskName":"Leg1","prio":2,"startAfter":"10h00"},
{"taskName":"Leg0","prio":1,"startAfter":"09h30"}
]

```

Sorting using a Sort node, with jsonata expression of the following single field works:

```auto
(
   $sort(
       payload,
       function($l , $r){$l.prio > $r.prio }
   ) 
)

```

But all expressions I tried to also sort using say field `startAfter` does not work, any ideas please?

---

<div class="post-metadata">

**Author:** ![E1cid](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/e1cid/32/77971_2.png) [@E1cid](https://discourse.nodered.org/u/E1cid)\
**Post date:** [6 October 2020 21:41 UTC](https://discourse.nodered.org/t/jsonata-soting-on-multiple-fields-of-objects-in-an-array/33852/2 "2020-10-06T21:41:36Z")

</div>

Two methods, hope example helps. Orderby is cleaner

```auto
[{"id":"187967a.a95e618","type":"inject","z":"4484ee28.caa3c","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"[{\"taskName\":\"Leg2\",\"prio\":2,\"startAfter\":\"11h00\"}, {\"taskName\":\"Leg1\",\"prio\":2,\"startAfter\":\"10h00\"}, {\"taskName\":\"Leg0\",\"prio\":1,\"startAfter\":\"09h30\"}]","payloadType":"json","x":130,"y":500,"wires":[["67f3f52c.e2114c"]]},{"id":"269a25ff.79887a","type":"debug","z":"4484ee28.caa3c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":590,"y":360,"wires":[]},{"id":"67f3f52c.e2114c","type":"change","z":"4484ee28.caa3c","name":"","rules":[{"t":"set","p":"sort","pt":"msg","to":"(\t $sort(\t (\t $sort(\t payload,\t function($l , $r){$l.startAfter > $r.startAfter }\t ) \t),\t function($l , $r){$l.prio > $r.prio }\t ) \t)","tot":"jsonata"},{"t":"set","p":"orderby","pt":"msg","to":"payload^(prio, startAfter)","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":350,"y":500,"wires":[["269a25ff.79887a"]]}]

```

> **[Path Operators · JSONata](https://docs.jsonata.org/path-operators#---order-by)**
>
> The path operators underpin the declarative nature of the map/filter/reduce processing model in JSONata.

---

<div class="post-metadata">

**Author:** ![IoTPlay](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/iotplay/32/40_2.png) [@IoTPlay](https://discourse.nodered.org/u/IoTPlay)\
**Post date:** [6 October 2020 21:45 UTC](https://discourse.nodered.org/t/jsonata-soting-on-multiple-fields-of-objects-in-an-array/33852/3 "2020-10-06T21:45:10Z")

</div>

Wow.... 2nd one so elegant. Thank you !

---

<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:** [20 October 2020 21:45 UTC](https://discourse.nodered.org/t/jsonata-soting-on-multiple-fields-of-objects-in-an-array/33852/4 "2020-10-20T21:45:21Z")

</div>

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