hangul-util
Version:
Korean Hangul Utils
91 lines (89 loc) • 3.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.sortByASC = sortByASC;
exports.sortByDESC = sortByDESC;
exports.sortByGroups = sortByGroups;
var _utils = require("./utils");
var intlCollator = Intl.Collator();
function baseCompare(str1, str2, orderASC) {
if (orderASC) {
return intlCollator.compare(str1, str2);
}
return intlCollator.compare(str2, str1);
}
function baseSortBy() {
var array = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var compare = arguments.length > 1 ? arguments[1] : undefined;
var orderASC = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
if (Array.isArray(compare)) {
var _keys = compare.map(function (x) {
return (0, _utils.splitByKey)(x);
});
return array.sort(function (a, b) {
for (var i = 0; i < compare.length; i++) {
var result = baseCompare((0, _utils.getNestedProperty)(_keys[i], a), (0, _utils.getNestedProperty)(_keys[i], b), orderASC);
if (result !== 0) return result;
}
return 0;
});
}
if (!compare) {
return array.sort(function (a, b) {
return baseCompare(a, b, orderASC);
});
}
var keys = (0, _utils.splitByKey)(compare);
return array.sort(function (a, b) {
return baseCompare((0, _utils.getNestedProperty)(keys, a), (0, _utils.getNestedProperty)(keys, b), orderASC);
});
}
function sortByASC() {
var array = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var compare = arguments.length > 1 ? arguments[1] : undefined;
return baseSortBy(array, compare, true);
}
function sortByDESC() {
var array = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var compare = arguments.length > 1 ? arguments[1] : undefined;
return baseSortBy(array, compare, false);
}
/**
* orderASC: true -> 오름차순
* orderASC: false -> 내림차순
*/
function sortByGroups() {
var array = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var groups = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var orderASC = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
var compare = arguments.length > 3 ? arguments[3] : undefined;
var objectBygroup = (0, _utils.reverseByObject)(groups);
var keys = (0, _utils.splitByKey)(compare);
var mapped = array.map(function (item, index) {
return {
index: index,
value: compare ? (0, _utils.getNestedProperty)(keys, item) : item
};
});
var baseSortByGroups = function baseSortByGroups(a, b) {
var _objectBygroup$a$valu, _objectBygroup$b$valu;
var status1 = (_objectBygroup$a$valu = objectBygroup[a.value]) !== null && _objectBygroup$a$valu !== void 0 ? _objectBygroup$a$valu : -1;
var status2 = (_objectBygroup$b$valu = objectBygroup[b.value]) !== null && _objectBygroup$b$valu !== void 0 ? _objectBygroup$b$valu : -1;
var condition1 = orderASC ? status1 - status2 : status2 - status1;
var condition2 = baseCompare(a.value, b.value, orderASC);
if (status1 === status2) {
return condition2 || 0;
}
if (status1 === -1) {
return orderASC ? 1 : -1;
}
if (status2 === -1) {
return orderASC ? -1 : 1;
}
return condition1 || condition2 || 0;
};
return mapped.sort(baseSortByGroups).map(function (item) {
return array[item.index];
});
}