27 lines
487 B
JavaScript
27 lines
487 B
JavaScript
export function sortByPattern(list, pattern, map) {
|
|
let weight = i => {
|
|
const index = pattern.indexOf(map(i))
|
|
return index > -1 ? pattern.length - index : 0
|
|
}
|
|
|
|
return sortByWeight(list, weight)
|
|
}
|
|
|
|
export function sortByWeight(list, fn) {
|
|
return list
|
|
.map(i => [fn(i), i])
|
|
.sort((a, b) => b[0] - a[0])
|
|
.map(i => i[1])
|
|
}
|
|
|
|
export function sortBy(fn) {
|
|
return (i1, i2) => {
|
|
let t1 = fn(i1)
|
|
let t2 = fn(i2)
|
|
|
|
if (t1 < t2) return 1
|
|
if (t1 > t2) return -1
|
|
return 0
|
|
}
|
|
}
|