26 lines
573 B
JavaScript
26 lines
573 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;
|
|
}
|
|
} |