How do I sort an array of objects in TypeScript? Specifically, I want to sort the objects based on one specific attribute, such as nome (“name”) or cognome (“surname”).
Here is the relevant code:
/* Object Class */
export class Test {
nome: string;
cognome: string;
}
/* Generic Component.ts */
tests: Test[];
test1: Test;
test2: Test;
this.test1.nome = ‘Andrea’;
this.test2.nome = ‘Marizo’;
this.test1.cognome = ‘Rossi’;
this.test2.cognome = ‘Verdi’;
this.tests.push(this.test2);
this.tests.push(this.test1);
How can I sort this.tests based on the nome or cognome attribute using typescript sort array of objects? Thanks!
The simplest way to sort an array of objects in TypeScript is as follows:
Ascending Order:
arrayOfObjects.sort((a, b) => (a.propertyToSortBy < b.propertyToSortBy ? -1 : 1));
Descending Order:
arrayOfObjects.sort((a, b) => (a.propertyToSortBy > b.propertyToSortBy ? -1 : 1));
In your case, to sort tests by nome or cognome:
Ascending Order:
testsSortedByNome = tests.sort((a, b) => (a.nome < b.nome ? -1 : 1));
testsSortedByCognome = tests.sort((a, b) => (a.cognome < b.cognome ? -1 : 1));
Descending Order:
testsSortedByNome = tests.sort((a, b) => (a.nome > b.nome ? -1 : 1));
testsSortedByCognome = tests.sort((a, b) => (a.cognome > b.cognome ? -1 : 1));
You can use the following method to sort an array of objects:
let sortedArray: Array<ModelItem>;
sortedArray = unsortedArray.slice(0);
sortedArray.sort((left, right) => {
if (left.id < right.id) return -1;
if (left.id > right.id) return 1;
return 0;
});
This approach creates a copy of the unsortedArray
and sorts it based on the id attribute.
To enhance readability and reusability, you can create a helper function like this:
export const by = <T>(attribute: keyof T) => {
return (one: T, two: T) => {
if (one[attribute] < two[attribute]) {
return -1;
} else if (one[attribute] > two[attribute]) {
return 1;
} else {
return 0;
}
};
};
Then, use this helper function to sort an array:
const users = [ /* items here */ ];
const sorted = users.sort(by('name'));