"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.arrayRemoveDuplicateBySort = exports.GroupItem = exports.ArrayExt = exports.List = void 0; var List = /** @class */ (function (_super) { __extends(List, _super); function List() { return _super !== null && _super.apply(this, arguments) || this; } /** 返回符合条件的第一个元素 */ List.prototype.first = function (fn) { if (this.length == 0) return null; for (var _i = 0, _a = this; _i < _a.length; _i++) { var item = _a[_i]; if (fn(item)) return item; } return null; }; /** 返回符合条件的最后一元素 */ List.prototype.last = function (fn) { if (this.length == 0) return null; for (var i = this.length - 1; i >= 0; i--) { if (fn(this[i])) return this[i]; } return null; }; /** 最大值 */ List.prototype.max = function (fn) { var maxV; for (var _i = 0, _a = this; _i < _a.length; _i++) { var i = _a[_i]; var v = fn(i); if (maxV == null) { maxV = fn(i); } else { if (v > maxV) { maxV = v; } } } return maxV; }; /** 最小值 */ List.prototype.min = function (fn) { var minV; for (var _i = 0, _a = this; _i < _a.length; _i++) { var i = _a[_i]; var v = fn(i); if (minV == null) { minV = fn(i); } else { if (v < minV) { minV = v; } } } return minV; }; /** 累加 */ List.prototype.sum = function (fn) { var v = 0; for (var _i = 0, _a = this; _i < _a.length; _i++) { var t = _a[_i]; v = v + fn(t); } return v; }; /** 平均值 */ List.prototype.avg = function (fn) { if (this.length == 0) return 0; var sum = this.sum(fn); return sum / this.length; }; /** 满足条件的元素数量 */ List.prototype.count = function (fn) { if (this.length == 0) return 0; var c = 0; for (var _i = 0, _a = this; _i < _a.length; _i++) { var item = _a[_i]; if (fn(item)) c = c + 1; } return c; }; List.prototype.FindMax = function (fn) { return this.reduce(function (a, b) { return fn(a) > fn(b) ? a : b; }); }; return List; }(Array)); exports.List = List; var ArrayExt = /** @class */ (function () { function ArrayExt() { } /** 返回满足条件的元素数量 */ ArrayExt.count = function (list, fn) { if (list.length == 0) return 0; var c = 0; for (var _i = 0, list_1 = list; _i < list_1.length; _i++) { var item = list_1[_i]; if (fn(item)) c = c + 1; } return c; }; /** 移除 */ ArrayExt.remove = function (list, obj) { var index = list.findIndex(function (t) { return t == obj; }); if (index == -1) return; list.splice(index, 1); }; /** 返回符合条件的第一个元素 */ ArrayExt.first = function (list, fn, orderFn1, orderFn2) { if (orderFn1 === void 0) { orderFn1 = null; } if (orderFn2 === void 0) { orderFn2 = null; } if (list.length == 0) return null; if (orderFn1 == null) { for (var _i = 0, list_2 = list; _i < list_2.length; _i++) { var item = list_2[_i]; if (fn(item)) return item; } return null; } var minValue1; var minValue2; var minItem; for (var _a = 0, list_3 = list; _a < list_3.length; _a++) { var item = list_3[_a]; if (fn(item) == false) continue; var v1 = orderFn1(item); var v2 = orderFn2 != null ? orderFn2(item) : 0; if (minValue1 == null || v1 < minValue1 || (v1 == minValue1 && v2 < minValue2)) { minValue1 = v1; minValue2 = v2; minItem = item; } } return minItem; }; /** 返回符合条件的最后一元素 */ ArrayExt.last = function (list, fn, orderFn1, orderFn2) { if (orderFn1 === void 0) { orderFn1 = null; } if (orderFn2 === void 0) { orderFn2 = null; } if (list.length == 0) return null; if (orderFn1 == null) { for (var i = list.length - 1; i >= 0; i--) { if (fn(list[i])) return list[i]; } return null; } // var maxValue1; var maxValue2; var maxItem; for (var _i = 0, list_4 = list; _i < list_4.length; _i++) { var item = list_4[_i]; if (fn(item) == false) continue; var v1 = orderFn1(item); var v2 = orderFn2 ? orderFn2(item) : 0; if (maxValue1 == null || v1 > maxValue1 || (v1 == maxValue1 && v2 > maxValue2)) { maxValue1 = v1; maxValue2 = v2; maxItem = item; } } return maxItem; }; /** 取最大值 */ ArrayExt.max = function (list, fn, whereF, defaultV) { if (whereF === void 0) { whereF = null; } if (defaultV === void 0) { defaultV = null; } var maxV; for (var _i = 0, list_5 = list; _i < list_5.length; _i++) { var i = list_5[_i]; if (whereF && whereF(i) == false) continue; var v = fn(i); if (maxV == undefined) { maxV = fn(i); } else { if (v > maxV) { maxV = v; } } } if (maxV != undefined) return maxV; return defaultV; }; /** 最小值 */ ArrayExt.min = function (list, fn, whereF, defaultV) { if (whereF === void 0) { whereF = null; } if (defaultV === void 0) { defaultV = null; } var minV; for (var _i = 0, list_6 = list; _i < list_6.length; _i++) { var i = list_6[_i]; if (whereF && whereF(i) == false) continue; var v = fn(i); if (minV == undefined) { minV = v; } else { if (v < minV) { minV = v; } } } if (minV != undefined) return minV; return defaultV; }; /** 累加 */ ArrayExt.sum = function (list, fn, wn) { var v = 0; for (var _i = 0, list_7 = list; _i < list_7.length; _i++) { var t = list_7[_i]; if (wn && wn(t) == false) continue; v = v + fn(t); } return v; }; /** 平均值 */ ArrayExt.avg = function (list, fn) { if (this.length == 0) return 0; var sum = ArrayExt.sum(list, fn); return sum / this.length; }; /** 排序 */ ArrayExt.sortBy = function (list, fn, fn2) { if (fn2 === void 0) { fn2 = null; } if (fn2 == null) return list.sort(function (a, b) { return fn(a) - fn(b); }); else return list.sort(function (a, b) { return fn(a) == fn(b) ? (fn2(a) - fn2(b)) : fn(a) - fn(b); }); }; /** 降序 排序 */ ArrayExt.sortByDescending = function (list, fn) { list.sort(function (a, b) { return fn(b) - fn(a); }); }; /** 排序成新的数组 */ ArrayExt.orderBy = function (list, fn, fn2) { if (fn2 === void 0) { fn2 = null; } var newList = list.concat([]); if (fn2 == null) return newList.sort(function (a, b) { return fn(a) - fn(b); }); else return newList.sort(function (a, b) { return fn(a) == fn(b) ? (fn2(a) - fn2(b)) : fn(a) - fn(b); }); }; /** 降序成新的数组 */ ArrayExt.orderByDescending = function (list, fn, fn2) { if (fn2 === void 0) { fn2 = null; } var newList = list.concat([]); if (fn2 == null) return list.sort(function (a, b) { return fn(b) - fn(a); }); else return list.sort(function (a, b) { return fn(a) == fn(b) ? (fn2(b) - fn2(a)) : fn(b) - fn(a); }); }; /** 分组 */ ArrayExt.groupBy = function (list, fn) { var groups = new Array(); var _loop_1 = function (item) { var key = fn(item); var group = groups.find(function (t) { return t.key == key; }); if (group == null) { group = new GroupItem(key); groups.push(group); } group.push(item); }; for (var _i = 0, list_8 = list; _i < list_8.length; _i++) { var item = list_8[_i]; _loop_1(item); } return groups; }; /** * 选择 * let newObjectList = ArrayExt.Select(list,t=>({pA:t.name, pB:t.age + "_"+ t.month}) ) ; */ ArrayExt.Select = function (list, fn) { var newList = new Array(); for (var _i = 0, list_9 = list; _i < list_9.length; _i++) { var t = list_9[_i]; newList.push(fn(t)); } return newList; }; /** 过来,并按顺序排序 */ ArrayExt.where = function (list, whereFn, orderfn1, orderfn2) { if (orderfn1 === void 0) { orderfn1 = null; } if (orderfn2 === void 0) { orderfn2 = null; } var newList = list.filter(whereFn); if (orderfn1 == null && orderfn2 == null) return newList; return ArrayExt.sortBy(newList, orderfn1, orderfn2); }; return ArrayExt; }()); exports.ArrayExt = ArrayExt; var GroupItem = /** @class */ (function () { function GroupItem(k) { this.key = k; this.list = []; } Object.defineProperty(GroupItem.prototype, "count", { get: function () { return this.list.length; }, enumerable: false, configurable: true }); GroupItem.prototype.push = function (d) { this.list.push(d); }; return GroupItem; }()); exports.GroupItem = GroupItem; /** * 对排序好的数组进行去重操作 * @param {(e1, e2) => boolean} [checkFuction] 校验对象相等函数 * @returns {Array} 返回自身 */ function arrayRemoveDuplicateBySort(arr, checkFuction) { if (checkFuction === void 0) { checkFuction = checkEqual; } if (arr.length < 2) return arr; var j = 1; for (var i = 1, l = arr.length; i < l; i++) if (!checkFuction(arr[j - 1], arr[i])) arr[j++] = arr[i]; arr.length = j; return arr; } exports.arrayRemoveDuplicateBySort = arrayRemoveDuplicateBySort;