@writetome51/get-sorted-by-property
v3.0.0
Published
Sorts array of objects by the value of a particular property
Downloads
2
Maintainers
Readme
getSortedByProperty( property: string, objects: object[]): object[]
Returns new array of objects
, sorted by property
in each.
Based on the data type of objects[0][property]
, it decides how to sort all objects
.
That type must be either number, string, or boolean. Sorting is done either numerically or
alphabetically (booleans are treated as strings).
The original objects
array is not modified.
Note: property
is a string that can include dot notation ( i.e.,'property.subproperty.subsubproperty'
).
Note: even if property
is an array index, here you need to use dot-notation
and not square braces, i.e., '1.0' // instead of [1][0]
Examples
let objects = [
{user: {email: '[email protected]', age: 55}},
{user: {email: '[email protected]', age: 83}},
{user: {email: '[email protected]', age: 19}},
{user: {email: '[email protected]', age: 28}}
];
getSortedByProperty('user.email', objects);
/**************
Returns:
[
{ user: { email: '[email protected]', age: 28 } },
{ user: { email: '[email protected]', age: 83 } },
{ user: { email: '[email protected]', age: 19 } },
{ user: { email: '[email protected]', age: 55 } }
]
**************/
getSortedByProperty('user.age', objects);
/**************
Returns:
[
{ user: { email: '[email protected]', age: 19 } },
{ user: { email: '[email protected]', age: 28 } },
{ user: { email: '[email protected]', age: 55 } },
{ user: { email: '[email protected]', age: 83 } }
]
**************/
// If the property is undefined in the first object, this triggers error:
objects = [
{ email: '[email protected]'},
{ email: '[email protected]', age: 28 },
{ email: '[email protected]', age: 55 }
];
getSortedByProperty('age', objects);
// Console: "Error: The first object in the objects array either doesn't have the specified
// property, or that property doesn't have a value."
// The following is something you need to be careful with.
// We're going to sort by 'user.age', but the value in first object will be a string,
// meaning sorting will be alphabetical:
objects = [
{user: {email: '[email protected]', age: '10'}}, // string means sorting will be alphabetical.
{user: {email: '[email protected]', age: 55}},
{user: {email: '[email protected]', age: 100}},
{user: {email: '[email protected]', age: 20}},
{user: {email: '[email protected]', age: 5}}
];
getSortedByProperty('user.age', objects);
/**************
Returns:
[
{ user: { email: '[email protected]', age: '10' } },
{ user: { email: '[email protected]', age: 100 } },
{ user: { email: '[email protected]', age: 20 } },
{ user: { email: '[email protected]', age: 5 } },
{ user: { email: '[email protected]', age: 55 } }
]
**************/
// The following scenario will cause an error.
// Again we're going to sort by 'user.age':
objects = [
{user: {email: '[email protected]', age: 10}}, // number means sorting will be numeric...
{user: {email: '[email protected]', age: '55'}}, // ...but since the numbers in the following items
{user: {email: '[email protected]', age: '100'}}, // are actually strings, that will trigger error.
{user: {email: '[email protected]', age: '20'}}
];
getSortedByProperty('user.age', objects);
// Console: "Error: Input must be a finite number of type 'number' "
Installation
npm i @writetome51/get-sorted-by-property
Loading
import {getSortedByProperty} from '@writetome51/get-sorted-by-property';