UNPKG

@pefish/js-node-assist

Version:
264 lines 8.27 kB
"use strict"; 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