orderBy | MuleSoft Documentation
# orderBy
## orderBy<K, V, R, O <: { (K)?: V }>(object: O, criteria: (value: V, key: K) -> R): O
Reorders the elements of an input using criteria that acts on selected elements of that input.
This version of `orderBy` takes an object as input. Other versions act on an input array or handle a `null` value.
Note that you can reference the index with the anonymous parameter `$$` and the value with `$`.
### Parameters
Name | Description  
---|---  
The object to reorder.  
The result of the function is used as the criteria to reorder the object.  
### Example
This example alphabetically orders the values of each object in the input array. Note that `orderBy($.letter)` produces the same result as `orderBy($[0])`.
#### Source
```
%dw 2.0
output application/json
---
[{ letter: "e" }, { letter: "d" }] orderBy($.letter)
```

#### Output
```
[
 {
  "letter": "d"
 },
 {
  "letter": "e"
 }
]
```

### Example
The `orderBy` function doesn’t have an option to sort the result in a descending order. In these cases, invert the order of the resulting array using `[-1 to 0]`:
#### Source
```
%dw 2.0
output application/json
---
orderDescending: ([3,8,1] orderBy $)[-1 to 0]
```

#### Output
```
{ "orderDescending": [8,3,1] }
```

## orderBy<T, R>(array: Array<T>, criteria: (item: T, index: Number) -> R): Array<T>
Sorts an array using the specified criteria.
### Parameters
Name | Description  
---|---  
The array to sort.  
The result of the function serves as criteria for sorting the array. It should return a simple value (`String`, `Number`, and so on).  
### Example
This example sorts an array of numbers based on the numeric values.
#### Source
```
%dw 2.0
output application/json
---
[3,2,3] orderBy $
```

#### Output
### Example
This example sorts an array of people based on their age.
#### Source
```
%dw 2.0
output application/json
---
[{name: "Santiago", age: 42},{name: "Leandro", age: 29}, {name: "Mariano", age: 35}] orderBy (person) -> person.age
```

#### Output
```
[
 {
  name: "Leandro",
  age: 29
 },
 {
  name: "Mariano",
  age: 35
 },
 {
  name: "Santiago",
  age: 42
 }
]
```

### Example
This example sorts an array of DateTime in descending order.
#### Source
```
%dw 2.0
output application/json
---
[|2020-10-01T23:57:59.017Z|, |2022-12-22T12:12:12.011Z|, |2020-10-01T12:40:10.012Z|, |2020-10-01T23:57:59.021Z|]
 orderBy -($ as Number {unit: "milliseconds"})
```

#### Output
```
[
 "2022-12-22T12:12:12.011Z",
 "2020-10-01T23:57:59.021Z",
 "2020-10-01T23:57:59.017Z",
 "2020-10-01T12:40:10.012Z"
]
```

### Example
This example changes the order of the objects in a JSON array. The expression first orders them alphabetically by the value of the `Type` key, then reverses the order based on the `[-1 to 0]`.
#### Source
```
%dw 2.0
var myInput = [
  {
    "AccountNumber": "987999321",
    "NameOnAccount": "QA",
    "Type": "AAAA",
    "CDetail": {
      "Status": "Open"
    }
  },
  {
    "AccountNumber": "12399978",
    "NameOnAccount": "QA",
    "Type": "BBBB",
    "CDetail": {}
  },
  {
    "AccountNumber": "32199974",
    "NameOnAccount": "QA",
    "Type": "CCCC",
    "CDetail": {}
  }
]
output application/json
---
(myInput orderBy $.Type)[-1 to 0]
```

#### Output
```
[
 {
  "AccountNumber": "32199974",
  "NameOnAccount": "QA",
  "Type": "CCCC",
  "CDetail": {
  }
 },
 {
  "AccountNumber": "12399978",
  "NameOnAccount": "QA",
  "Type": "BBBB",
  "CDetail": {
  }
 },
 {
  "AccountNumber": "987999321",
  "NameOnAccount": "QA",
  "Type": "AAAA",
  "CDetail": {
   "Status": "Open"
  }
 }
]
```

## orderBy(value: Null, criteria: (item: Nothing, index: Nothing) -> Null): Null
Helper function that enables `orderBy` to work with a `null` value.