Files
cut-abstractions/samples/handleAbility/common/ArrayExt.js
2025-07-14 16:04:08 +08:00

366 lines
12 KiB
JavaScript

"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<T>} 返回自身
*/
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;