UNPKG

ascor

Version:

一些常用的简单的js工具

61 lines (60 loc) 2.09 kB
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; }); };