@pefish/js-node-assist
Version:
assistance tool of node
264 lines • 8.27 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const string_1 = __importStar(require("./string"));
class ArrayUtil {
/**
* 转换为二维数组
* @param spliceNum 每个小数组几个元素
* @param arrayNum 分成几个小数组
* @returns {*}
*/
static toTwoDimen(src, spliceNum, arrayNum) {
if (spliceNum !== undefined && arrayNum === undefined) {
const num = src.length % spliceNum === 0 ? parseInt((src.length / spliceNum).toString()) : parseInt((src.length / spliceNum).toString()) + 1;
const newArrays = [];
for (let i = 0; i < num; i++) {
const arr = src.slice(spliceNum * i, spliceNum * (i + 1));
if (arr.length > 0) {
newArrays.push(arr);
}
}
return newArrays;
}
else if (spliceNum === undefined && arrayNum !== undefined) {
const newArrays = [];
const num = parseInt((src.length / arrayNum).toString());
for (let i = 0; i < arrayNum; i++) {
const arr = src.slice(num * i, num * (i + 1));
if (arr.length > 0) {
newArrays.push(arr);
}
}
if (num * arrayNum < src.length) {
newArrays[newArrays.length - 1] = newArrays[newArrays.length - 1].concat(src.slice(num * arrayNum, src.length));
}
return newArrays;
}
else {
throw new Error(`spliceNum or arrayNum error`);
}
}
/**
* 简单去重
*/
static uniq(src) {
return [...new Set(src)];
}
/**
* 移除null、undefined以及空字符串
* @returns {Array}
*/
static removeEmpty(src) {
const results = [];
src.forEach((ele) => {
if (ele !== undefined && ele !== undefined && ele !== '') {
results.push(ele);
}
});
return results;
}
/**
* 计算平均数
* @returns {any}
*/
static getAverage(src) {
let sum = new string_1.Calculator('0');
src.forEach((ele) => {
sum = sum.add(ele);
});
return sum.div(src.length.toString()).end();
}
/**
* 取数组最后一个元素
* @returns {*}
*/
static getLastOne(src) {
return src[src.length - 1];
}
static removeLastOne(src) {
if (src.length === 0) {
return [];
}
return src.slice(0, src.length - 1);
}
/**
* 取数组第一个元素
* @returns {*}
*/
static getFirstOne(src) {
return src[0];
}
static removeFirstOne(src) {
if (src.length === 0) {
return [];
}
return src.slice(1, src.length);
}
static removeStart(src, num) {
return src.slice(num, src.length);
}
static removeEnd(src, num) {
return src.slice(0, src.length - num);
}
static removeByIndex(src, index) {
if (index > src.length - 1) {
throw new Error(`索引超过数组长度`);
}
const temp = this.deepCopy(src);
temp.splice(index, 1);
return temp;
}
static removeByValue(src, value) {
const temp = this.deepCopy(src);
const index = temp.indexOf(value);
if (index === -1) {
throw new Error(`没有找到 ${value}`);
}
temp.splice(index, 1);
return temp;
}
static deepCopy(src) {
return Array.from(src);
}
static append(src, arr) {
return src.concat(arr);
}
/**
* 取出最大值(值以及索引),只适用于数值数组以及字符串数组, 返回值为字符串
*/
static getMax(src) {
if (src.length === 0) {
throw new Error(`空数组`);
}
let maxValue = src[0].toString();
for (let i = 1; i < src.length; i++) {
if (string_1.default.start(src[i].toString()).gt(maxValue)) {
maxValue = src[i].toString();
}
}
const maxIndex = [];
for (let i = 0; i < src.length; i++) {
if (string_1.default.start(src[i].toString()).eq(maxValue)) {
maxIndex.push(i);
}
}
return {
value: maxValue,
indexes: maxIndex
};
}
static sortWithPriority(src, order) {
if (src.length === 0) {
throw new Error(`空数组`);
}
src.sort(([val, priority], [val1, priority1]) => {
if (string_1.default.start(val.toString()).eq(val1)) {
return order === `desc` ? priority.toString().lt(priority1) : string_1.default.start(priority.toString()).gt(priority1);
}
else {
return order === `desc` ? val.toString().lt(val1) : string_1.default.start(val.toString()).gt(val1);
}
});
return src;
}
static getMin(src) {
if (src.length === 0) {
throw new Error(`空数组`);
}
let minValue = src[0].toString();
for (let i = 1; i < src.length; i++) {
if (string_1.default.start(src[i].toString()).lt(minValue)) {
minValue = src[i].toString();
}
}
const minIndex = [];
for (let i = 0; i < src.length; i++) {
if (string_1.default.start(src[i].toString()).eq(minValue)) {
minIndex.push(i);
}
}
return {
value: minValue,
indexes: minIndex
};
}
static getSum(src) {
return src.reduce((acc, val) => {
return string_1.default.start(val.toString()).add(acc).end();
});
}
static select(src, indexes) {
if (indexes === undefined || indexes === undefined) {
return src;
}
const result = [];
indexes.forEach((index) => {
result.push(src[index]);
});
return result;
}
static toUpperCase(src) {
return src.map((element) => {
return element.toString().toUpperCase();
});
}
static toLowerCase(src) {
return src.map((element) => {
return element.toString().toLowerCase();
});
}
static random(src) {
if (src.length === 0) {
throw new Error(`空数组`);
}
return src[Math.floor(Math.random() * 1E4) % src.length];
}
/**
* [190, 190] --> BEBE 十进制转成16进制
* @returns {string}
*/
static numberArrayToHexString(src) {
if (src.length === 0) {
throw new Error(`空数组`);
}
return src.map((byte) => {
return string_1.default.numberStrToHex(byte.toString());
}).join('');
}
/**
* 取子数组。[start, end)
* @param start
* @param end
*/
static subArray(src, start, end) {
if (src.length === 0) {
throw new Error(`空数组`);
}
return src.slice(start, end);
}
}
exports.default = ArrayUtil;
//# sourceMappingURL=array.js.map