Skip to content

Sorts array of objects by the value of a particular property

License

Notifications You must be signed in to change notification settings

writetome51/sort-by-property

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sortByProperty(
      property: string,
      objects: object[]
): void

Re-orders 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).

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}}
];
sortByProperty('user.email', objects);
console.log(objects);
/**************
[
    { user: { email: '[email protected]', age: 28 } },
    { user: { email: '[email protected]', age: 83 } },
    { user: { email: '[email protected]', age: 19 } },
    { user: { email: '[email protected]', age: 55 } } 
]
**************/

sortByProperty('user.age', objects);
console.log(objects);
/**************
[
    { 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 } 
];
sortByProperty('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}}
];
sortByProperty('user.age', objects);
console.log(objects);
/**************
[
    { 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 } }
]
**************/

Installation

npm i @writetome51/sort-by-property

Loading

import {sortByProperty} from '@writetome51/sort-by-property';

Releases

No releases published

Packages

No packages published