(JavaScript+Flowtype).Sort
type SortDirection = "ascending" | "descending"
reverseDirection(sortDirection: SortDirection): SortDirection {
return sortDirection == "ascending" ? "descending" : "ascending"
}
sortStatement(lhs: any, rhs: any, sortDirection: SortDirection): number {
if (lhs === rhs) {
return 0
} else if (sortDirection === "ascending") {
return (lhs > rhs) ? 1 : -1
} else if (sortDirection === "descending") {
return (lhs < rhs) ? 1 : -1
} else {
return 0
}
}
sort<T>(
items: Array<T>,
direction: SortDirection,
compare: (lhs: T, rhs: T) => [any, any]): Array<T> {
return items.sort((lhs: T, rhs: T) => {
const pair = compare(lhs, rhs)
return this.sortStatement(pair[0], pair[1], direction)
})
}