JavaScript常用实用方法封装

对一个数组指定个数拆分成几个数组

function group(array, subGroupLength) {
  let index = 0;
  let newArray = [];
  while(index < array.length) {
    newArray.push(array.slice(index, index += subGroupLength));
  }
  return newArray;
}

指定范围内的随机整数

function random(minimum, maximum) {
  var number = Math.floor(minimum + Math.random() * (maximum - minimum));
  return number;
}

数字转汉字

function convertToChinaNum(num) {
    var arr1 = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
    var arr2 = ['', '十', '百', '千', '万', '十', '百', '千', '亿', '十', '百', '千','万', '十', '百', '千','亿'];//可继续追加更高位转换值
    if(!num || isNaN(num)){
        return "零";
    }
    var english = num.toString().split("")
    var result = "";
    for (var i = 0; i < english.length; i++) {
        var des_i = english.length - 1 - i;//倒序排列设值
        result = arr2[i] + result;
        var arr1_index = english[des_i];
        result = arr1[arr1_index] + result;
    }
    //将[零千、零百]换成[零] [十零]换成[十]
    result = result.replace(/零(千|百|十)/g, '零').replace(/十零/g, '十');
    //合并中间多个零为一个零
    result = result.replace(/零+/g, '零');
    //将[零亿]换成[亿][零万]换成[万]
    result = result.replace(/零亿/g, '亿').replace(/零万/g, '万');
    //将[亿万]换成[亿]
    result = result.replace(/亿万/g, '亿');
    //移除末尾的零
    result = result.replace(/零+$/, '')
    //将[零一十]换成[零十]
    //result = result.replace(/零一十/g, '零十');//正规读法是零一十
    //将[一十]换成[十]
    result = result.replace(/^一十/g, '十');
    return result;
}

判断对象数组中是否有该对象,有则替换无则添加

function formateArrObjData(initialArr, obj, pro) {
   // 判定数据是否为数组
   if (!(initialArr instanceof Array)) {
       return []; //'请传入正确格式的数组'
   }
   // 判定数据是否为对象
   if (!(obj instanceof Object)) {
       return []; //'请传入正确格式的对象'
   }
   if (!pro) {
       return []; //'请传入正确格式的属性名'(用于判断的key值)
   }

   let index = initialArr.findIndex((val) => val[pro] === obj[pro]);
   let tempArr = initialArr;
   // 如果有就替换  没有就添加
   if (initialArr.findIndex((val) => val[pro] === obj[pro]) !== -1) {
       tempArr.splice(index, 1, obj);
   } else {
       tempArr.push(obj);
   }
   return tempArr;
},

新数组和老数组合并,修改过数据就替换,新的数据就添加

function dataReplace(newArr, arr) {
  let resSet = new Set(arr.map((item) => item.cellLocation)); // 转成 set
  // 转换成 map
  let editAllMap = new Map(newArr.map((item) => [item.cellLocation, item]));
  let arry = arr
      .map((item) => {
          // 实现覆盖
          // 找到原来的数组
          if (editAllMap.has(item.cellLocation)) {
              return { ...item, ...editAllMap.get(item.cellLocation) }; // 覆盖
          }
          return { ...item };
      })
      .concat(
          // 拼接多的部分,即没覆盖的部分
          ...newArr.filter((item) => !resSet.has(item.cellLocation)),
      );
  for (var i = 0; i < arry.length - 1; i++) {
      for (var j = i + 1; j < arry.length; j++) {
          if (arry[i].cellLocation == arry[j].cellLocation) {
              arry.splice(j, 1);
              // splice删除了一个元素,下标要减一,否则循环会漏掉一个元素(多个相邻的元素 可能会漏掉删除元素)
              j--;
          }
      }
  }
  return arry;
}


function dataReplace2(target, source) {
        target.forEach((item) => {
          source.find((i) => {
            if (item.id === i.id) {
              for (const key in i) {
                if (key != "id") {
                  item[key] = i[key];
                }
              }
              item.name = i.name;
              i.replace = true;
            }
          });
        });
        return [...target, ...source.filter((item) => !item.replace)];
      }

数据对象中children为[],则删除children键

function deleteChildren(arr) {
    let childs = arr;
    for (let i = childs.length; i--; i > 0) {
        if (childs[i].children) {
            if (childs[i].children.length) {
                deleteChildren(childs[i].children);
            } else {
                delete childs[i].children;
            }
        }
    }
    return arr;
}

数组对象根据自定义的key比对,相同值相加去重

// delSameObjValue 数组对象相同值相加去重
    // arr 需要处理的数组
    // resultNum 最终计算结果的键名
    // keyName 用于计算判断的键名
    // keyValue 用于计算结果的键名 --> 对应的键值为number类型
    function delSameObjValue(arr, resultNum, keyName, keyValue) {
      const warp = new Map();
      arr.forEach((item) => {
        let str = keyName.map((v) => item[v]).join("_");
        item[resultNum] = keyValue.reduce((p, c) => {
          return (p += item[c]);
        }, 0);
        warp.has(str)
          ? (warp.get(str)[resultNum] += item[resultNum])
          : warp.set(str, item);
      });
      return Array.from(warp).map(([, v]) => v);
    }

获取URL上面的参数

function getUrlParam(sUrl, sKey) {
    var result = {};
    sUrl.replace(/(\w+)=(\w+)(?=[&|#])/g, function (ele, key, val) {
        if (!result[key]) {
            result[key] = val;
        } else {
            var temp = result[key];
            result[key] = [].concat(temp, val);
        }
    })
    if (!sKey) {
        return result;
    } else {
        return result[sKey] || '';
    }
}

多个异步按顺序执行

  	let taskList = [];
    let task;
    function mockTask(count) {
      // 创建多个异步函数
      for (let i = 0; i < count; i++) {
        let fn = () => {
          let time = parseInt(Math.random() * 1000);
          setTimeout(() => {
            console.log(`队列${i + 1}: 耗时${time}ms`);
            task.next();
          }, time);
        };
        taskList.push(fn);
      }
      function* main() {
        for (const iterator of taskList) {
          yield iterator();
        }
      }
      task = main();
      task.next();
    }
    mockTask(10);

时间格式转换

<html>
	<head>
		<meta charset="UTF-8">
		<title>日期</title>
	</head>
	<body>
		<div id="pDate"></div>
	</body>
</html>
<script type="text/javascript">
	var sWeek = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");
	var dNow = new Date();
	var CalendarData = new Array(100);
	var madd = new Array(12);
	var tgString = "甲乙丙丁戊己庚辛壬癸";
	var dzString = "子丑寅卯辰巳午未申酉戌亥";
	var numString = "一二三四五六七八九十";
	var monString = "正二三四五六七八九十冬腊";
	var sx = "鼠牛虎兔龙蛇马羊猴鸡狗猪";
	var cYear, cMonth, cDay, TheDate;
	CalendarData = new Array(0xA4B, 0x5164B, 0x6A5, 0x6D4, 0x415B5, 0x2B6, 0x957, 0x2092F, 0x497, 0x60C96, 0xD4A, 0xEA5, 0x50DA9, 0x5AD, 0x2B6, 0x3126E, 0x92E, 0x7192D, 0xC95, 0xD4A, 0x61B4A, 0xB55, 0x56A, 0x4155B, 0x25D, 0x92D, 0x2192B, 0xA95, 0x71695, 0x6CA, 0xB55, 0x50AB5, 0x4DA, 0xA5B, 0x30A57, 0x52B, 0x8152A, 0xE95, 0x6AA, 0x615AA, 0xAB5, 0x4B6, 0x414AE, 0xA57, 0x526, 0x31D26, 0xD95, 0x70B55, 0x56A, 0x96D, 0x5095D, 0x4AD, 0xA4D, 0x41A4D, 0xD25, 0x81AA5, 0xB54, 0xB6A, 0x612DA, 0x95B, 0x49B, 0x41497, 0xA4B, 0xA164B, 0x6A5, 0x6D4, 0x615B4, 0xAB6, 0x957, 0x5092F, 0x497, 0x64B, 0x30D4A, 0xEA5, 0x80D65, 0x5AC, 0xAB6, 0x5126D, 0x92E, 0xC96, 0x41A95, 0xD4A, 0xDA5, 0x20B55, 0x56A, 0x7155B, 0x25D, 0x92D, 0x5192B, 0xA95, 0xB4A, 0x416AA, 0xAD5, 0x90AB5, 0x4BA, 0xA5B, 0x60A57, 0x52B, 0xA93, 0x40E95);
	madd[0] = 0;
	madd[1] = 31;
	madd[2] = 59;
	madd[3] = 90;
	madd[4] = 120;
	madd[5] = 151;
	madd[6] = 181;
	madd[7] = 212;
	madd[8] = 243;
	madd[9] = 273;
	madd[10] = 304;
	madd[11] = 334;

	function GetBit(m, n) {
		return(m >> n) & 1;
	}

	function e2c() {
		TheDate = (arguments.length != 3) ? new Date() : new Date(arguments[0], arguments[1], arguments[2]);
		var total, m, n, k;
		var isEnd = false;
		var tmp = TheDate.getFullYear();
		total = (tmp - 1921) * 365 + Math.floor((tmp - 1921) / 4) + madd[TheDate.getMonth()] + TheDate.getDate() - 38;
		if(TheDate.getYear() % 4 == 0 && TheDate.getMonth() > 1) {
			total++;
		}
		for(m = 0;; m++) {
			k = (CalendarData[m] < 0xfff) ? 11 : 12;
			for(n = k; n >= 0; n--) {
				if(total <= 29 + GetBit(CalendarData[m], n)) {
					isEnd = true;
					break;
				}
				total = total - 29 - GetBit(CalendarData[m], n);
			}
			if(isEnd) break;
		}
		cYear = 1921 + m;
		cMonth = k - n + 1;
		cDay = total;
		if(k == 12) {
			if(cMonth == Math.floor(CalendarData[m] / 0x10000) + 1) {
				cMonth = 1 - cMonth;
			}
			if(cMonth > Math.floor(CalendarData[m] / 0x10000) + 1) {
				cMonth--;
			}
		}
	}

	/*戊戌狗年 腊月廿*/
	function GetcDateString() {
		var tmp = "";
		tmp += tgString.charAt((cYear - 4) % 10);
		tmp += dzString.charAt((cYear - 4) % 12);
		tmp += sx.charAt((cYear - 4) % 12);
		tmp += "年 农历";
		if(cMonth < 1) {
			tmp += "(闰)";
			tmp += monString.charAt(-cMonth - 1);
		} else {
			tmp += monString.charAt(cMonth - 1);
		}
		tmp += "月";
        // console.log();
		tmp += (cDay < 11) ? "初" : ((cDay < 20) ? "十" : ((cDay < 30) ? "廿" : "三十"));
        // console.log(tmp);
		if(cDay % 10 != 0 || cDay == 10) {
			tmp += numString.charAt((cDay - 1) % 10);
		}
        // console.log(tmp);
		return tmp;
	}

	function GetLunarDay(solarYear, solarMonth, solarDay) {
		if(solarYear < 1921) {
			return "";
		} else {
			solarMonth = (parseInt(solarMonth) > 0) ? (solarMonth - 1) : 11;
			e2c(solarYear, solarMonth, solarDay);
			return GetcDateString();
			
		}
	}
	

	function getFullYear(d) { // 修正firefox下year错误
		yr = d.getYear();
		if(yr < 1000) yr += 1900;
		return yr;
	}

/*写入页面*/
	function showDate() {
		
		var D = new Date();
		var yy = D.getFullYear();
		var mm = D.getMonth() + 1;
		var dd = D.getDate();
		var ww = D.getDay();
		var ss = parseInt(D.getTime() / 1000);
		var h = D.getHours();
		var m = D.getMinutes();
		var s = D.getSeconds();
		
		var sValue = getFullYear(dNow) + "年" + (dNow.getMonth() + 1) + "月" + dNow.getDate() + "日" + " " + sWeek[dNow.getDay()] + " ";
		sValue += GetLunarDay(yy, mm, dd);
		sValue += shapetime(h,m,s);
		document.getElementById("pDate").innerHTML = sValue;
		setTimeout("showDate()", 500);
	};

/*格式化时间*/
	function shapetime(h, m, s) {
		if(s <= 9) s = "0" + s;
		if(m <= 9) m = "0" + m;
		if(h <= 9) h = "0" + h;
		return h + ":" + m + ":" + s
	}

	window.onload = showDate;
</script>

输入一个值,返回其数据类型

/**
 * 输入一个值,返回其数据类型
 * @param {*} para
 * @returns
 */
function returnDataType(para) {
  return Object.prototype.toString.call(para).slice(8, -1);
}

计算数的阶乘

/**
 *  计算数的阶乘
 * @param {*} num
 * @returns
 */
function factorial(num) {
  if (num < 0) return -1;
  return num === 1 ? 1 : num * factorial(--num);
}

两数之间累乘

/**
 *  两数之间累乘
 * @param {*} x
 * @param {*} y
 * @returns
 */
function multiplicative(x, y) {
  let count;
  if (x < y) {
    count = x;
    for (let i = x + 1; i <= y; i++) {
      count *= i;
    }
    return count;
  } else {
    count = y;
    for (let i = y + 1; i <= x; i++) {
      count *= i;
    }
    return count;
  }
}

计算函数执行所用时间

/**
 * 计算函数执行所用时间 带参数
 * @param {*} fn
 * @returns
 */
function computeTime(fn) {
  let startTime = new Date().getTime();
  let p = [];
  for (let i = 1; i < arguments.length; i++) {
    p.push(arguments[i]);
  }
  fn.apply(null, p);
  let endTime = new Date().getTime();
  let Time = endTime - startTime;
  return Time;
}

数字超过99显示99+

/**
 * 数字超过99显示99+
 * @param { Number } num
 * @param { String } str 后缀可自定义
 * @returns
 */
function numFilter(num, str = "+") {
  if (Object.prototype.toString.call(str).slice(8, -1) !== "String") {
    console.warn("第二参数为最好为字符串类型!");
  }
  num = num ? num - 0 : 0;
  if (num > 99) {
    return "99" + str;
  } else {
    return num;
  }
}

统计相同name出现的次数(num)和其他字段的规定的次数

/**
 * 统计相同name出现的次数(num)和其他字段的规定的次数
 * @param {Array} array
 */
function jisuan(array) {
  let newArray = [];
  let nameList = array.map((item) => {
    return item.name;
  });
  let numList = nameList.reduce(function (a, b) {
    a[b] = a[b] + 1 || 1;
    return a;
  }, {});
  for (const key in numList) {
    if (Object.hasOwnProperty.call(numList, key)) {
      let leng = 0;
      let aa = array.filter((e) => e.name == key);
      aa.forEach((res) => {
        if (res.已完成 == 1) {
          leng += 1;
        }
      });
      newArray.push({
        name: key,
        num: numList[key],
        已完成: leng,
      });
    }
  }
  return newArray;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龟中的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值