utilTools.ts 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. export const utilTools = {
  2. /**
  3. * 打乱数组元素
  4. * @param arr
  5. */
  6. randomArr(arr: any): any {
  7. arr = JSON.parse(JSON.stringify(arr));
  8. let tmpArr = [];
  9. while (arr.length > 0) {
  10. let index = Math.floor(Math.random() * arr.length);
  11. tmpArr.push(arr[index]);
  12. arr.splice(index, 1);
  13. }
  14. return tmpArr;
  15. },
  16. /**
  17. * 返回给定范围内的随机数值
  18. * @param min 最小值
  19. * @param max 最大值
  20. * @returns {number}
  21. */
  22. getFloatValue(min: number, max: number) {
  23. var dv = max - min;
  24. if (dv < 0) {
  25. return 0;
  26. }
  27. var val = min + Math.random() * dv;
  28. return val;
  29. },
  30. // 跨天判断
  31. overDay(date: any, now?: any) {
  32. if (!date) {
  33. return true;
  34. }
  35. if (!now) {
  36. now = new Date();
  37. }
  38. let overDay = false;
  39. if (date.getDate() == now.getDate()) {
  40. if (now - date >= 24 * 60 * 60 * 1000) {
  41. overDay = true;
  42. }
  43. } else {
  44. overDay = true;
  45. }
  46. return overDay;
  47. },
  48. /**
  49. * 根据权重从数组中返回指定的个数元素
  50. * @param arr 数组
  51. * @param num 返回个数
  52. * @param canRepeat 是否可以重复取,默认不可以
  53. * @returns {Array} 返回结果数组
  54. */
  55. getRowsByWeightAndNum(arr: any, num: number, canRepeat?: boolean) {
  56. if (!num) {
  57. num = 1;
  58. }
  59. var ret = [];
  60. arr = utilTools.copyObj(arr);
  61. for (var i = 0; i < num; i++) {
  62. if (arr.length <= 0) {
  63. break;
  64. }
  65. var row = this.getRowByWeight(arr);
  66. ret.push(row);
  67. if (!canRepeat) {
  68. var index = arr.indexOf(row);
  69. arr.splice(index, 1);
  70. }
  71. }
  72. return ret;
  73. },
  74. /**
  75. * 根据权重从数组中返回一个元素
  76. * @param arr
  77. * @param totalWeight
  78. */
  79. getRowByWeight(arr: any, totalWeight?: number) {
  80. if (!totalWeight) {
  81. totalWeight = 0;
  82. for (var i in arr) {
  83. var weight = arr[i].weight;
  84. if (!weight) {
  85. weight = 0;
  86. }
  87. totalWeight += weight;
  88. }
  89. }
  90. var random = Math.random() * totalWeight;
  91. var left = 0;
  92. var row = null;
  93. for (var i in arr) {
  94. var tmpRow = arr[i];
  95. var weight = tmpRow.weight;
  96. if (!weight) {
  97. weight = 0;
  98. }
  99. if (random >= left && random < left + weight) {
  100. row = tmpRow;
  101. break;
  102. }
  103. left += weight;
  104. }
  105. return row;
  106. },
  107. /**
  108. * 从给定的数组中,随机取出一个元素
  109. * @param arr 数组
  110. * @return {null|*} 返回随机到的元素
  111. */
  112. getRandomItemByArr(arr: any) {
  113. if (!arr || arr.length <= 0) {
  114. return null;
  115. }
  116. let index = Math.floor(Math.random() * arr.length);
  117. return arr[index];
  118. },
  119. /**
  120. * 深度拷贝对象
  121. * @param obj 要拷贝的对象内容
  122. */
  123. copyObj(obj: object) {
  124. return JSON.parse(JSON.stringify(obj));
  125. },
  126. }