Improve sort pipe to take multiple args

This commit is contained in:
2017-05-04 23:47:09 +02:00
parent 87bcdf48a5
commit 9ff2e86c65
2 changed files with 16 additions and 21 deletions

View File

@@ -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>

View File

@@ -1,29 +1,24 @@
// 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> {
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;
}
transform(array: Array<string>, ...args: any[]): Array<string> {
console.log("test: " + args);
array.sort((a: any, b: any) => {
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;
}
}