import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ name: 'sortBy' }) export class SortByPipe implements PipeTransform { /** * Sort an array by multiple elements. * * Example to sort an array respectively by Year, Album, Disc Number, etc. * Typescript usage: *
* new SortByPipe().transform(this.songs, 'Year', 'Album', 'Disc Number', 'Track Number', 'Play Count'); ** In HTML usage: *
** * * @param array array to sort * @param args elements used to sort in oder */ transform(array: Array , ...args: any[]): Array { array.sort((a: any, b: any) => { for (let i = 0; i < args.length; i++) { const arg = args[i]; if (a[arg] === undefined && b[arg] !== undefined) { return -1; } if (a[arg] !== undefined && b[arg] === undefined) { return 1; } if (a[arg] < b[arg]) { return -1; } if (a[arg] > b[arg]) { return 1; } } return 0; }); return array; } }