UNPKG

hangul-util

Version:
91 lines (89 loc) 3.43 kB
"use strict"; 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]; }); }