Improve sort pipe to take multiple args
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
<h1>{{albumName}}</h1>
|
<h1>{{albumName}}</h1>
|
||||||
|
|
||||||
<ul class="heroes">
|
<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}}
|
{{("0" + song['Track Number']).slice(-2)}}. {{song.Name}} -- {{song.Artist}} -- {{song.Album}}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</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';
|
import { Pipe, PipeTransform } from '@angular/core';
|
||||||
|
|
||||||
@Pipe({name: "sortBy"})
|
@Pipe({name: "sortBy"})
|
||||||
export class SortPipe implements PipeTransform {
|
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) => {
|
array.sort((a: any, b: any) => {
|
||||||
if (a[args] == undefined && b[args] == undefined) {
|
for (let i = 0; i < array.length; i++) {
|
||||||
return 0;
|
let arg = args[i];
|
||||||
}
|
|
||||||
if (a[args] == undefined && b[args] != undefined) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (a[args] != undefined && b[args] == undefined) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( a[args] < b[args] ){
|
if (a[arg] == undefined && b[arg] != undefined) return -1;
|
||||||
return -1;
|
if (a[arg] != undefined && b[arg] == undefined) return 1;
|
||||||
}else if( a[args] > b[args] ){
|
|
||||||
return 1;
|
if (a[arg] < b[arg]) return -1;
|
||||||
}else{
|
if (a[arg] > b[arg]) return 1;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
});
|
});
|
||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user