每次需要用到什么工具方法都要去百度上查好久,今天发布了这篇帖子用于记录一些我经常使用的方法,不定期更新随时补充
校验字符串是否为空串
/**
* 判断字符串是不是NULL或空串或空格组成
* @param str 被判断的字符串
* @return {boolean} 为空返回true,不为空返回false
*/
function strIsBlank(str) {
// 判断是否为空
if (str == null || str.length < 1) {
return true
}
// 判断是否为空格组成
return new RegExp("^[ ]+$").test(str);
}
/**
* 判断字符串是不是NULL或空串或空格组成
* @param str 被判断的字符串
* @return {boolean} 不为空返回true,为空返回false
*/
function strIsNotBlank(str) {
return !strIsBlank(str);
}
将Date、毫秒值转换为字符串的年月日
/**
* zhe-将Date转换为字符串时间
* @param date Date对象
* @param pattern 转换规则,默认为 yyyy-MM-dd HH:mm:ss
* @return {string} 返回的时间字符串
*/
function dateFormatByObj(date, pattern = "yyyy-MM-dd HH:mm:ss") {
var o = {
"M+": date.getMonth() + 1,
"d+": date.getDate(),
"H+": date.getHours(),
"m+": date.getMinutes(),
"s+": date.getSeconds(),
"q+": Math.floor((date.getMonth() + 3) / 3),
"S": date.getMilliseconds()
};
if (/(y+)/.test(pattern)) {
pattern = pattern.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(pattern)) {
pattern = pattern.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
}
}
return pattern;
}
/**
* zhe-毫秒值转换为字符串时间
* @param time 时间戳
* @param pattern 转换规则,默认为 yyyy-MM-dd HH:mm:ss
* @return {string} 返回的时间字符串
*/
function dateFormatByTime(time, pattern = "yyyy-MM-dd HH:mm:ss") {
return dateFormatByObj(new Date(time), pattern);
}
递归删除JS对象中的NULL值
function removeNulls(obj){
var isArray = obj instanceof Array;
for (var k in obj){
if (obj[k]===null) isArray ? obj.splice(k,1) : delete obj[k];
else if (typeof obj[k]=="object") removeNulls(obj[k]);
}
}
将阿拉伯数字转换为中文大写的形式
/**
* 例如:1234 → 一千二百三十四
* 代码是网上找的,自己稍微做了点修改,目前最大数字可支持到千万
*/
function toChinaNumber(number) {
if (typeof (number) != 'number') {
console.error("util.js:getChinaNumber:传入只能是number")
}
let changeNum = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']; //changeNum[0] = "零"
let unit = ["", "十", "百", "千", "万"];
number = parseInt(number);
let getWan = (temp) => {
let strArr = temp.toString().split("").reverse();
let newNum = "";
for (var i = 0; i < strArr.length; i++) {
newNum = (i == 0 && strArr[i] == 0 ? "" : (i > 0 && strArr[i] == 0 && strArr[i - 1] == 0 ? "" : changeNum[strArr[i]] + (strArr[i] == 0 ? unit[0] : unit[i]))) + newNum;
}
return newNum;
}
let overWan = Math.floor(number / 10000);
let noWan = number % 10000;
if (noWan.toString().length < 4) noWan = "0" + noWan;
let result = overWan ? getWan(overWan) + "万" + getWan(noWan) : getWan(number);
if (result.indexOf("一十") != -1) {
result = result.substr(1);
}
return result;
}
遍历节点数,返回最深的那一层的深度
/**
* @param obj 需要获取深度的对象
* @param attr 对象中代表子节点的属性名,例如children
*/
function getDeepNumber(obj, attr) {
// 定义变量用来存储最深深度
let deepNumber = 0;
// 创建递归函数用于获取深度
let recursion = (obj, num = 0) => {
// num代表当前分支的深度,默认值为0,每次执行一次深度+1
num++;
// 在该节点有子节点的情况下递归调用
if (obj[attr].length != 0) {
obj[attr].forEach(item => recursion(item, num));
}
// 当没有子节点的时候代表已经是当前分支的最后一层,将深度赋值给deepNumber
deepNumber = (num > deepNumber) ? num : deepNumber;
// 当前递归结束后需要-1,然后递归上一层的其他节点
num--;
};
recursion(obj);
return deepNumber;
}