ascor
Version:
一些常用的简单的js工具
61 lines (60 loc) • 2.09 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
import { isString, isArray, isEmpty, isNumber, isObject } from "../is/index";
/**
* 数组排序,正序:纯数字 >> 中文 >> 字母,倒序 : 字母 >> 中文 >> 纯数字,中文则按拼音首字母排列
* @param arr 传入需要排序的数组
* @param config {mode:"asc | desc",key:"id"} asc正序,从小到大,desc倒序,从大到小, key为要比较的对象的key
* @return Array 返回排序后的数组
*/
export var arraySort = function (arr, config) {
var _c = __assign({ mode: "asc", key: "" }, (isObject(config) ? config : {}));
if (!isArray(arr)) {
return arr;
}
var format = function (v, key) {
if (isEmpty(v)) {
return 0;
}
var _v = isEmpty(key) ? v : v[key];
if (isEmpty(_v)) {
return 0;
}
if (isNumber(_v)) {
return _v;
}
if (!isNaN(_v)) {
return Number(_v);
}
if (!isString(_v)) {
return _v.toString();
}
return _v;
};
//复制数组,避免修改原数组
var _arr = JSON.parse(JSON.stringify(arr));
return _arr.sort(function (a, b) {
var _a = format(a, _c.key);
var _b = format(b, _c.key);
var desc = _c.mode == "desc"; //是否倒序
if (isNumber(_a) && !isNumber(_b)) {
return desc ? 1 : -1;
}
if (!isNumber(_a) && isNumber(_b)) {
return desc ? -1 : 1;
}
if (isString(_a) && isString(_b)) {
return desc ? -_a.localeCompare(_b, "zh") : _a.localeCompare(_b, "zh");
}
return _a < _b ? (desc ? 1 : -1) : _a > _b ? (desc ? -1 : 1) : 0;
});
};