array-sort-by
Version:
Sorts an array and allows specify multiple sorting criteria
37 lines (34 loc) • 881 B
JavaScript
const DESC = /^desc:\s*/i;
/**
* @private
*
* Compares each element and defines the sorting mode.
* @see http://ow.ly/UvDD309zozK
*
* @param {Any} prev: n element to compare
* @param {Any} next: n+1 element to compare
* @return {Number}
*/
function comparer(prev, next) {
let asc = 1;
if (typeof prev === 'string') {
if (DESC.test(prev)) asc = -1;
}
if (prev === next) return 0;
return (prev > next ? 1 : -1) * asc;
}
/**
* Compares each decorated element.
*
* @param {Array} prevItems: decorated element at n index to compare
* @param {Array} nextItems: decorated element at n+1 index to compare
* @return {Number}
*/
export default function sortItems(prevItems, nextItems) {
let i, ordered;
for (i in prevItems) { // eslint-disable-line
ordered = comparer(prevItems[i], nextItems[i]);
if (ordered) return ordered;
}
return 0;
}