index.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. /**
  2. * 数组类
  3. */
  4. export class ArrayManager {
  5. constructor() {}
  6. /**
  7. * 数字类型数组排序
  8. * @param arr 数组
  9. * @param type 排序方式,asc:升序,desc:降序
  10. *
  11. * @default asc
  12. */
  13. sort = (arr, type = "asc") => {
  14. let arrNew = JSON.parse(JSON.stringify(arr));
  15. arrNew.sort((a, b) => {
  16. if (type == "asc") {
  17. return a - b
  18. } else {
  19. return b - a
  20. }
  21. })
  22. return arrNew;
  23. }
  24. /**
  25. * 数组分割
  26. * @param arr 要处理的数组
  27. * @param len 分割长度
  28. */
  29. split = (arr, len) => {
  30. if (len == 0) {
  31. return arr;
  32. }
  33. let ret = []
  34. for (let i = 0; i < arr.length; i += len) {
  35. ret.push(arr.slice(i, i + len))
  36. }
  37. return ret
  38. }
  39. /**
  40. * 判断两个数组的数据是否相同
  41. * @param arr1 第一个数组
  42. * @param arr2 第二个数组
  43. *
  44. * @@return {true/false}
  45. */
  46. isSame = (arr1, arr2) => {
  47. let newArr1 = JSON.parse(JSON.stringify(arr1));
  48. let newArr2 = JSON.parse(JSON.stringify(arr2));
  49. let arr1Sort = newArr1.sort().toString();
  50. let arr2Sort = newArr2.sort().toString();
  51. var c = newArr1.length === newArr2.length && arr1Sort === arr2Sort
  52. return c;
  53. }
  54. /**
  55. * 移除数组中的元素
  56. * @param arr 要操作的数组
  57. * @param value 要移除的值
  58. *
  59. * @@return {Array} 移除元素后的数组
  60. */
  61. remove = (arr, value) => {
  62. let newArr = JSON.parse(JSON.stringify(arr));
  63. let indexOf = newArr.indexOf(value);
  64. if (indexOf >= 0) {
  65. newArr.splice(indexOf, 1)
  66. }
  67. return newArr;
  68. }
  69. /**
  70. * 添加新元素到指定位置
  71. */
  72. add = (arr, index, value) => {
  73. let newArr = JSON.parse(JSON.stringify(arr));
  74. newArr.splice(index, 0, value);
  75. return newArr;
  76. }
  77. /**
  78. * 数组中的最大值
  79. */
  80. max = (arr) => {
  81. let newArr = JSON.parse(JSON.stringify(arr));
  82. newArr.sort((a, b) => {
  83. return b - a
  84. })
  85. return newArr[0];
  86. }
  87. /**
  88. * 数组中的最小值
  89. */
  90. min = (arr) => {
  91. let newArr = JSON.parse(JSON.stringify(arr));
  92. newArr.sort((a, b) => {
  93. return a - b
  94. })
  95. return newArr[0];
  96. }
  97. /**
  98. * 数组打乱
  99. */
  100. disruption = (arr) => {
  101. return arr.sort(() => Math.random() - 0.5);
  102. }
  103. /**
  104. * 随机取值
  105. * @param arr 数组
  106. * @param length 取出的长度
  107. * @param isSame 是否可以相同
  108. */
  109. random = (arr, length = 1, isSame = false) => {
  110. if (arr.length <= length) {
  111. return arr;
  112. }
  113. let copyArr = JSON.parse(JSON.stringify(arr));
  114. let newArr = []; //创建一个新数组
  115. for (let i = 0; i < length; i++) {
  116. let temp = Math.floor(Math.random() * copyArr.length); //取随机下标
  117. newArr.push(copyArr[temp]); //添加到新数组
  118. if (!isSame) {
  119. copyArr.splice(temp, 1) //删除当前的数组元素,避免重复
  120. }
  121. }
  122. return newArr;
  123. }
  124. /**
  125. * 去重
  126. */
  127. unique = (arr) => {
  128. let copyArr = JSON.parse(JSON.stringify(arr));
  129. if (Array.hasOwnProperty('from')) {
  130. return Array.from(new Set(copyArr));
  131. } else {
  132. var n = {},
  133. r = [];
  134. for (var i = 0; i < copyArr.length; i++) {
  135. if (!n[copyArr[i]]) {
  136. n[copyArr[i]] = true;
  137. r.push(copyArr[i]);
  138. }
  139. }
  140. return r;
  141. }
  142. }
  143. /**
  144. * 合并去重
  145. */
  146. union = (arr, arr2) => {
  147. var newArr = arr.concat(arr2);
  148. return this.unique(newArr);
  149. }
  150. /**
  151. * 取交集
  152. */
  153. intersect = (arr, arr2) => {
  154. arr = this.unique(arr);
  155. let newArr = [];
  156. for (let i = 0; i < arr.length; i++) {
  157. if (arr2.includes(arr[i])) {
  158. newArr.push(arr[i])
  159. }
  160. }
  161. return newArr;
  162. }
  163. /**
  164. * 是否是数组
  165. */
  166. isArray(value) {
  167. if (typeof Array.isArray === 'function') {
  168. return Array.isArray(value)
  169. }
  170. return Object.prototype.toString.call(value) === '[object Array]'
  171. }
  172. /**
  173. * 平均值
  174. * @param {Object} arr
  175. */
  176. avg = (arr) => {
  177. let sum = 0;
  178. for (let i = 0; i < arr.length; i++) {
  179. sum += arr[i];
  180. }
  181. return sum / arr.length;
  182. }
  183. /**
  184. * 求和
  185. */
  186. sum = (arr, hex = 10) => {
  187. return arr.reduce((pre, cur) => {
  188. if (hex == 16) {
  189. return parseInt(parseInt('0x' + pre) + parseInt('0x' + cur)).toString(16)
  190. } else {
  191. return pre + cur
  192. }
  193. })
  194. }
  195. }