记录一些经常使用的JS通用工具方法,代码来自互联网,佛性更新

空字符串校验

/**
* 判断字符串是不是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);
}

时间格式化

/**
* 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);
}

对象深拷贝

/**
* 对象深拷贝
* @param obj 被拷贝的对象
*/
function deepCopy(obj) {
let target = null
if (typeof obj === 'object') {
//数组
if (Array.isArray(obj)) {
target = [];
obj.forEach(item => {
target.push(deepCopy(item));
})
} else if (obj) {
target = {}
let objKeys = Object.keys(obj);
objKeys.forEach(key => {
target[key] = deepCopy(obj[key]);
})
} else {
target = obj
}
} else {
target = obj;
}
return target
}

对象是否相等

/**
* 判断两个对象是否相等
* @param a 对象a
* @param b 对象b
*/
function equals(a, b) {
// 1. 空值校验
if (a == null || b == null) {
return a == b;
}
// 2. 函数校验
if (typeof(a) === 'function' || typeof(b) === 'function') {
return a == b
}
// 3. 获取对象中属性列表,数量不一致直接返回false
const aProps = Object.getOwnPropertyNames(a);
const bProps = Object.getOwnPropertyNames(b);
if (aProps.length != bProps.length) {
return false;
}
// 4. 遍历属性列表,比较值是否相等
for (let i = 0; i < aProps.length; i++) {
const propName = aProps[i]
const propA = a[propName]
const propB = b[propName]
// 如果属性类型为object,递归进入equals
if (typeof(propA) === 'object') {
return this.equals(propA, propB);
}
return propA === propB;
}
return true
}

递归删除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;
}

JS常用的工具方法的更多相关文章

  1. js 常用业务工具方法 (es5,es6)持续更新

    数组去重 数组去重最原始的方法就是使用双层循环. es5: // 使用indexOf function unique(array) { var res = []; for (var i = 0, le ...

  2. 秒味课堂Angular js笔记------Angular js中的工具方法

    Angular js中的工具方法 angular.isArray angular.isDate angular.isDefined angular.isUndefined angular.isFunc ...

  3. JS常用时间处理方法

    这里会扩展一些JS常用时间处理方法,内置时间对象的方法不再赘述 -- 传送门:http://www.w3school.com.cn/js/jsref_obj_date.asp 时间格式化 -- 转换为 ...

  4. JS常用字符串处理方法应用总结

    这篇文章主要总结了JS常用字符串的处理方法,需要的朋友可以参考下   1.indexOf()方法,从前往后查找字符串位置,大小写敏感,从0开始计数.同理,lastIndexOf() 方法从后往前,两个 ...

  5. Angungular.js 的过滤器&工具方法

    字母大小写 数字 货币 截取字符串 截取数组 用JS操作 ----------------------------------------------------------------------- ...

  6. js常用几种类方法实现

    js定义类方法的常用几种定义 1 定义方法,方法中包含实现 function createCORSRequest() { var xhr = new XMLHttpRequest(); xhr.onl ...

  7. js常用的工具函数

    JS选取DOM元素的方法注意:原生JS选取DOM元素比使用jQuery类库选取要快很多1.通过ID选取元素document.getElementById('myid');2.通过CLASS选取元素do ...

  8. javscript 一些常用的工具方法

    一些工作中经常会用到的js代码,可以封装成一个工具库. 积少成多,从现在开始吧! -------------- 1 . 判断一段文字的长度.要求中文相当于2个字符,非中文的相当于1个字符 String ...

  9. Js 常用调试的方法

    A  使用alert() 和document.write() 方法监视变量值 如果要中断代码的运行,监视变量的值,则使用alert() 方法: 如果需要查看的值很多,则使用document.write ...

  10. JavaScript基础 -- js常用内置方法和对象

    JS中常用的内置函数如下: 1.eval(str):计算表达式的结果. 2.parseInt(str,n):将符串转换成整数数字形式(可指定几进制). 3.parseFloat(str):将字符串转换 ...

随机推荐

  1. 聚焦 | 数据湖分析如何面向对象存储OSS进行优化?

    简介: 最佳实践,以DLA为例子.DLA致力于帮助客户构建低成本.简单易用.弹性的数据平台,比传统Hadoop至少节约50%的成本.其中DLA Meta支持云上15+种数据数据源(OSS.HDFS.D ...

  2. 探索 WPF 的 ITabletManager.GetTabletCount 在 Win11 系统的底层实现

    本文将和大家介绍专为 WPF 触摸模块提供的 ITabletManager 的 GetTabletCount 方法在 Windows 11 系统的底层实现 本文属于 WPF 触摸相关系列博客,偏系统底 ...

  3. 2018-4-15-WPF-在-Alt+Tab-隐藏窗口

    title author date CreateTime categories WPF 在 Alt+Tab 隐藏窗口 lindexi 2018-04-15 10:13:40 +0800 2018-3- ...

  4. 为 RabbitMQ 服务器启用 SSL/TLS

    为 RabbitMQ 服务器启用 SSL/TLS 目录 为 RabbitMQ 服务器启用 SSL/TLS 为客户端和服务器生成自签名证书 在 RabbitMQ 服务器中启用 TLS/SSL 支持 使用 ...

  5. 探索 DTD 在 XML 中的作用及解析:深入理解文档类型定义

    DTD 是文档类型定义(Document Type Definition)的缩写.DTD 定义了 XML 文档的结构以及合法的元素和属性. 为什么使用 DTD 通过使用 DTD,独立的团体可以就数据交 ...

  6. selenium项目中遇到的问题总结

    问题:在pycharm中运行用例能成功,在命令行运行提示找不到com包解决办法:添加一个PYTHONPATH的环境变量,值为工程目录的路径 当要查找的文本前后有换行时,用如下方法解决//td[cont ...

  7. FFmpeg开发笔记(十九)FFmpeg开启两个线程分别解码音视频

    ​同步播放音视频的时候,<FFmpeg开发实战:从零基础到短视频上线>一书第10章的示例程序playsync.c采取一边遍历一边播放的方式,在源文件的音频流和视频流交错读取的情况下,该方式 ...

  8. RAC关闭【Oracle 10g】

    顺序:关闭监听->关闭实例->关闭服务->关闭软件 1.关闭监听 进入节点1,[oracle@arprac01 ~]$lsnrctl stop 进入节点2,[oracle@arpra ...

  9. nim 3. 各种集合

    其实我挺想先去学习一下nim的模块系统,毕竟我决定暂时放弃学习golang,就是因为感觉他的模块和包方面的设计,不像c#+nuget的组合那么舒服. 但是这里还是先学习一下集合吧,感觉这方面nim很有 ...

  10. 如何在Ubuntu 16.04上安装和保护MongoDB

    第1步 - 添加MongoDB存储库 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14 ...