JS常用的工具方法
记录一些经常使用的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常用的工具方法的更多相关文章
- js 常用业务工具方法 (es5,es6)持续更新
数组去重 数组去重最原始的方法就是使用双层循环. es5: // 使用indexOf function unique(array) { var res = []; for (var i = 0, le ...
- 秒味课堂Angular js笔记------Angular js中的工具方法
Angular js中的工具方法 angular.isArray angular.isDate angular.isDefined angular.isUndefined angular.isFunc ...
- JS常用时间处理方法
这里会扩展一些JS常用时间处理方法,内置时间对象的方法不再赘述 -- 传送门:http://www.w3school.com.cn/js/jsref_obj_date.asp 时间格式化 -- 转换为 ...
- JS常用字符串处理方法应用总结
这篇文章主要总结了JS常用字符串的处理方法,需要的朋友可以参考下 1.indexOf()方法,从前往后查找字符串位置,大小写敏感,从0开始计数.同理,lastIndexOf() 方法从后往前,两个 ...
- Angungular.js 的过滤器&工具方法
字母大小写 数字 货币 截取字符串 截取数组 用JS操作 ----------------------------------------------------------------------- ...
- js常用几种类方法实现
js定义类方法的常用几种定义 1 定义方法,方法中包含实现 function createCORSRequest() { var xhr = new XMLHttpRequest(); xhr.onl ...
- js常用的工具函数
JS选取DOM元素的方法注意:原生JS选取DOM元素比使用jQuery类库选取要快很多1.通过ID选取元素document.getElementById('myid');2.通过CLASS选取元素do ...
- javscript 一些常用的工具方法
一些工作中经常会用到的js代码,可以封装成一个工具库. 积少成多,从现在开始吧! -------------- 1 . 判断一段文字的长度.要求中文相当于2个字符,非中文的相当于1个字符 String ...
- Js 常用调试的方法
A 使用alert() 和document.write() 方法监视变量值 如果要中断代码的运行,监视变量的值,则使用alert() 方法: 如果需要查看的值很多,则使用document.write ...
- JavaScript基础 -- js常用内置方法和对象
JS中常用的内置函数如下: 1.eval(str):计算表达式的结果. 2.parseInt(str,n):将符串转换成整数数字形式(可指定几进制). 3.parseFloat(str):将字符串转换 ...
随机推荐
- WPF 如何获取有哪些 VisualBrush 用了某个控件
我写了一个特殊的控件,我期望了解到有哪些 VisualBrush 捕获了此控件,或者说有哪些 VisualBrush 用了此控件的界面 本文的方法需要用到反射,需要使用 WPF 框架里面没有公开的字段 ...
- 开发日志:windows 服务器禁用TLS1.0和TLS1.1协议使网站更安全
SSL/TLS 的版本 协议 发布时间 状态 SSL 1.0 未公布 未公布 SSL 2.0 1995 年 已于 2011 年弃用 SSL 3.0 1996 年 已于 2015 年弃用 TLS 1.0 ...
- vue-苟曰的老板不发工资230行原创js代码写个扫雷小游戏
上gif: 1.开局提示动画 2.游戏中状态提示 3.开挂模式提示 4.计时器 5.游戏模式扫雷成功,蓝色进度条表示当次扫雷的完成度 6.若当次时间小于最佳记录,则更新最佳记录,如果最佳记录小于设置的 ...
- Java数字转中文数字——支持:Integer、BigDecimal
1.效果 public static void main(String[] args) { System.out.println(int2chineseNum(3456)); System.out.p ...
- Solution Set - 数学相关
CF645F Link&Submission. 利用 \(\sum\limits_{d|n}\varphi(\frac{n}{d})=n\),只要对每个数 \(x\),求出 \(cnt_x\) ...
- 跟羽夏学 Ghidra ——简述
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...
- 大数据面试SQL每日一题系列:最高峰同时在线主播人数。字节,快手等大厂高频面试题
大数据面试SQL每日一题系列:最高峰同时在线主播人数.字节,快手等大厂高频面试题 之后会不定期更新每日一题sql系列. SQL面试题每日一题系列内容均来自于网络以及实际使用情况收集,如有雷同,纯属巧合 ...
- Goland 的配置
目录 下载安装 设置好go的系统环境变量 设置 GOROOT 设置 GOPATH 设置 MODULES 设置 工作面板里的字体缩放大小快捷键 安装主题包 安装中文中包 Redis Mannager 读 ...
- pageoffice在线打开word文件加盖电子印章
一.加盖印章的 js 方法 js方法 二.常见使用场景 1.常规盖章.弹出用户名.密码输入框,选择对应印章. 点击盖章按钮弹出用户名密码登录框,登录以后显示选择电子印章. document.getEl ...
- python 日志 logging模块详解
1.基本使用 配置logging基本的设置,然后在控制台输出日志, import logging logging.basicConfig(level=logging.INFO, format='%(a ...