123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- export const utilTools = {
- /**
- * 打乱数组元素
- * @param arr
- */
- randomArr(arr: any): any {
- arr = JSON.parse(JSON.stringify(arr));
- let tmpArr = [];
- while (arr.length > 0) {
- let index = Math.floor(Math.random() * arr.length);
- tmpArr.push(arr[index]);
- arr.splice(index, 1);
- }
- return tmpArr;
- },
- /**
- * 返回给定范围内的随机数值
- * @param min 最小值
- * @param max 最大值
- * @returns {number}
- */
- getFloatValue(min: number, max: number) {
- var dv = max - min;
- if (dv < 0) {
- return 0;
- }
- var val = min + Math.random() * dv;
- return val;
- },
- // 跨天判断
- overDay(date: any, now?: any) {
- if (!date) {
- return true;
- }
- if (!now) {
- now = new Date();
- }
- let overDay = false;
- if (date.getDate() == now.getDate()) {
- if (now - date >= 24 * 60 * 60 * 1000) {
- overDay = true;
- }
- } else {
- overDay = true;
- }
- return overDay;
- },
- /**
- * 根据权重从数组中返回指定的个数元素
- * @param arr 数组
- * @param num 返回个数
- * @param canRepeat 是否可以重复取,默认不可以
- * @returns {Array} 返回结果数组
- */
- getRowsByWeightAndNum(arr: any, num: number, canRepeat?: boolean) {
- if (!num) {
- num = 1;
- }
- var ret = [];
- arr = utilTools.copyObj(arr);
- for (var i = 0; i < num; i++) {
- if (arr.length <= 0) {
- break;
- }
- var row = this.getRowByWeight(arr);
- ret.push(row);
- if (!canRepeat) {
- var index = arr.indexOf(row);
- arr.splice(index, 1);
- }
- }
- return ret;
- },
- /**
- * 根据权重从数组中返回一个元素
- * @param arr
- * @param totalWeight
- */
- getRowByWeight(arr: any, totalWeight?: number) {
- if (!totalWeight) {
- totalWeight = 0;
- for (var i in arr) {
- var weight = arr[i].weight;
- if (!weight) {
- weight = 0;
- }
- totalWeight += weight;
- }
- }
- var random = Math.random() * totalWeight;
- var left = 0;
- var row = null;
- for (var i in arr) {
- var tmpRow = arr[i];
- var weight = tmpRow.weight;
- if (!weight) {
- weight = 0;
- }
- if (random >= left && random < left + weight) {
- row = tmpRow;
- break;
- }
- left += weight;
- }
- return row;
- },
- /**
- * 从给定的数组中,随机取出一个元素
- * @param arr 数组
- * @return {null|*} 返回随机到的元素
- */
- getRandomItemByArr(arr: any) {
- if (!arr || arr.length <= 0) {
- return null;
- }
- let index = Math.floor(Math.random() * arr.length);
- return arr[index];
- },
- /**
- * 深度拷贝对象
- * @param obj 要拷贝的对象内容
- */
- copyObj(obj: object) {
- return JSON.parse(JSON.stringify(obj));
- },
- }
|