123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- /**
- * 数组类
- */
- export class ArrayManager {
- constructor() {}
- /**
- * 数字类型数组排序
- * @param arr 数组
- * @param type 排序方式,asc:升序,desc:降序
- *
- * @default asc
- */
- sort = (arr, type = "asc") => {
- let arrNew = JSON.parse(JSON.stringify(arr));
- arrNew.sort((a, b) => {
- if (type == "asc") {
- return a - b
- } else {
- return b - a
- }
- })
- return arrNew;
- }
- /**
- * 数组分割
- * @param arr 要处理的数组
- * @param len 分割长度
- */
- split = (arr, len) => {
- if (len == 0) {
- return arr;
- }
- let ret = []
- for (let i = 0; i < arr.length; i += len) {
- ret.push(arr.slice(i, i + len))
- }
- return ret
- }
- /**
- * 判断两个数组的数据是否相同
- * @param arr1 第一个数组
- * @param arr2 第二个数组
- *
- * @@return {true/false}
- */
- isSame = (arr1, arr2) => {
- let newArr1 = JSON.parse(JSON.stringify(arr1));
- let newArr2 = JSON.parse(JSON.stringify(arr2));
- let arr1Sort = newArr1.sort().toString();
- let arr2Sort = newArr2.sort().toString();
- var c = newArr1.length === newArr2.length && arr1Sort === arr2Sort
- return c;
- }
- /**
- * 移除数组中的元素
- * @param arr 要操作的数组
- * @param value 要移除的值
- *
- * @@return {Array} 移除元素后的数组
- */
- remove = (arr, value) => {
- let newArr = JSON.parse(JSON.stringify(arr));
- let indexOf = newArr.indexOf(value);
- if (indexOf >= 0) {
- newArr.splice(indexOf, 1)
- }
- return newArr;
- }
- /**
- * 添加新元素到指定位置
- */
- add = (arr, index, value) => {
- let newArr = JSON.parse(JSON.stringify(arr));
- newArr.splice(index, 0, value);
- return newArr;
- }
- /**
- * 数组中的最大值
- */
- max = (arr) => {
- let newArr = JSON.parse(JSON.stringify(arr));
- newArr.sort((a, b) => {
- return b - a
- })
- return newArr[0];
- }
- /**
- * 数组中的最小值
- */
- min = (arr) => {
- let newArr = JSON.parse(JSON.stringify(arr));
- newArr.sort((a, b) => {
- return a - b
- })
- return newArr[0];
- }
- /**
- * 数组打乱
- */
- disruption = (arr) => {
- return arr.sort(() => Math.random() - 0.5);
- }
- /**
- * 随机取值
- * @param arr 数组
- * @param length 取出的长度
- * @param isSame 是否可以相同
- */
- random = (arr, length = 1, isSame = false) => {
- if (arr.length <= length) {
- return arr;
- }
- let copyArr = JSON.parse(JSON.stringify(arr));
- let newArr = []; //创建一个新数组
- for (let i = 0; i < length; i++) {
- let temp = Math.floor(Math.random() * copyArr.length); //取随机下标
- newArr.push(copyArr[temp]); //添加到新数组
- if (!isSame) {
- copyArr.splice(temp, 1) //删除当前的数组元素,避免重复
- }
- }
- return newArr;
- }
- /**
- * 去重
- */
- unique = (arr) => {
- let copyArr = JSON.parse(JSON.stringify(arr));
- if (Array.hasOwnProperty('from')) {
- return Array.from(new Set(copyArr));
- } else {
- var n = {},
- r = [];
- for (var i = 0; i < copyArr.length; i++) {
- if (!n[copyArr[i]]) {
- n[copyArr[i]] = true;
- r.push(copyArr[i]);
- }
- }
- return r;
- }
- }
- /**
- * 合并去重
- */
- union = (arr, arr2) => {
- var newArr = arr.concat(arr2);
- return this.unique(newArr);
- }
- /**
- * 取交集
- */
- intersect = (arr, arr2) => {
- arr = this.unique(arr);
- let newArr = [];
- for (let i = 0; i < arr.length; i++) {
- if (arr2.includes(arr[i])) {
- newArr.push(arr[i])
- }
- }
- return newArr;
- }
- /**
- * 是否是数组
- */
- isArray(value) {
- if (typeof Array.isArray === 'function') {
- return Array.isArray(value)
- }
- return Object.prototype.toString.call(value) === '[object Array]'
- }
- /**
- * 平均值
- * @param {Object} arr
- */
- avg = (arr) => {
- let sum = 0;
- for (let i = 0; i < arr.length; i++) {
- sum += arr[i];
- }
- return sum / arr.length;
- }
- /**
- * 求和
- */
- sum = (arr, hex = 10) => {
- return arr.reduce((pre, cur) => {
- if (hex == 16) {
- return parseInt(parseInt('0x' + pre) + parseInt('0x' + cur)).toString(16)
- } else {
- return pre + cur
- }
- })
- }
- }
|