Improve sort pipe to take multiple args
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
<h1>{{albumName}}</h1>
|
||||
|
||||
<ul class="heroes">
|
||||
<li *ngFor="let song of songs | sortBy : 'Track Number'" >
|
||||
<li *ngFor="let song of songs | sortBy : 'Album':'Track Number'" >
|
||||
{{("0" + song['Track Number']).slice(-2)}}. {{song.Name}} -- {{song.Artist}} -- {{song.Album}}
|
||||
</li>
|
||||
</ul>
|
||||
@@ -1,28 +1,23 @@
|
||||
// Thank to http://4dev.tech/2016/09/angular2-how-to-sort-a-json-dataset-by-field/
|
||||
// Thank to http://4dev.tech/2016/09/angular2-how-to-sort-a-json-dataset-by-field/ for the pipe
|
||||
// Thank to http://stackoverflow.com/questions/28560801/javascript-sorting-array-by-multiple-criteria for the multi-args part
|
||||
|
||||
import { Pipe, PipeTransform } from '@angular/core';
|
||||
|
||||
@Pipe({name: "sortBy"})
|
||||
export class SortPipe implements PipeTransform {
|
||||
transform(array: Array<string>, args: string): Array<string> {
|
||||
transform(array: Array<string>, ...args: any[]): Array<string> {
|
||||
console.log("test: " + args);
|
||||
array.sort((a: any, b: any) => {
|
||||
if (a[args] == undefined && b[args] == undefined) {
|
||||
return 0;
|
||||
}
|
||||
if (a[args] == undefined && b[args] != undefined) {
|
||||
return -1;
|
||||
}
|
||||
if (a[args] != undefined && b[args] == undefined) {
|
||||
return 1;
|
||||
}
|
||||
for (let i = 0; i < array.length; i++) {
|
||||
let arg = args[i];
|
||||
|
||||
if ( a[args] < b[args] ){
|
||||
return -1;
|
||||
}else if( a[args] > b[args] ){
|
||||
return 1;
|
||||
}else{
|
||||
return 0;
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user