d2-ui
Version:
75 lines (55 loc) • 2.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = arraySort;
var _isString = require('./isString');
var _isString2 = _interopRequireDefault(_isString);
var _isNumber = require('./isNumber');
var _isNumber2 = _interopRequireDefault(_isNumber);
var _isArray = require('./isArray');
var _isArray2 = _interopRequireDefault(_isArray);
var _isObject = require('./isObject');
var _isObject2 = _interopRequireDefault(_isObject);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function arraySort(array, direction, key, emptyFirst) {
// supports [number], [string], [{key: number}], [{key: string}], [[string]], [[number]]
if (!(0, _isArray2.default)(array)) {
return;
}
key = !!key || (0, _isNumber2.default)(key) ? key : 'name';
array.sort(function (a, b) {
// if object, get the property values
if ((0, _isObject2.default)(a) && (0, _isObject2.default)(b)) {
a = a[key];
b = b[key];
}
// if array, get from the right index
if ((0, _isArray2.default)(a) && (0, _isArray2.default)(b)) {
a = a[key];
b = b[key];
}
// string
if ((0, _isString2.default)(a) && (0, _isString2.default)(b)) {
a = a.toLowerCase();
b = b.toLowerCase();
if (direction === 'DESC') {
// TODO: Case sensitive really required? Why not allow `desc`, `Desc` or `dEsC`?
return a < b ? 1 : a > b ? -1 : 0;
} else {
return a < b ? -1 : a > b ? 1 : 0;
}
}
// number
else if ((0, _isNumber2.default)(a) && (0, _isNumber2.default)(b)) {
return direction === 'DESC' ? b - a : a - b;
} else if (a === undefined || a === null) {
return emptyFirst ? -1 : 1;
} else if (b === undefined || b === null) {
return emptyFirst ? 1 : -1;
}
return -1;
});
return array;
}
//# sourceMappingURL=arraySort.js.map