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):将字符串转换 ...
随机推荐
- dotnet 修复在 Linux 上使用 SkiaSharp 提示找不到 libSkiaSharp 库
本文告诉大家如何简单修复在 Linux 上使用 SkiaSharp 提示找不到 libSkiaSharp 库 我的应用在 Windows 上跑的好好的,放在 Linux 上一运行就炸掉了,异常内容如下 ...
- 从改一个老项目开始的PHP踩坑记
php所有版本的地址: https://windows.php.net/downloads/releases/archives/ 访问控制器时省略了index.php报No input file sp ...
- CF877F Ann and Books (分类统计贡献+普通莫队)
CF877F Ann and Books 题意: 商店里有 \(n\) 本书,每本书中有 \(a_i\) 个 \(t_i=1/2\) 类问题. \(m\) 次询问,每次询问给出一个区间,求有多少个符合 ...
- ADOBE FORM的一些相关资料
虽然很多人觉得打印程序的开发很无聊(我也这么想),但在实际工作中,打印算是比较有意义的工作,所以还是值得学习的. 之前翻译过几篇Adobe Form的文章,其中的内容,可以帮助创建一些简单的打印示例, ...
- 应急响应--windows入侵排查
- kali linux 渗透测试 01 kali介绍
安全问题的根源 分层思想------盲人摸象 只追求功能实现----比较片面 最大的安全威胁是人---- 安全目标 先于攻击者发现和防止漏洞出现 攻击型安全 防护性安全 渗透测试 尝试击破安全防御机制 ...
- LLM基础能力实现-书生浦语大模型实战营学习笔记2&大语言模型4
大语言模型-4.LLM基础能力实现 书生浦语大模型实战营学习笔记-2.LLM基础能力实现 本文包括第二期实战营的第2课内容.本来是想在笔记中给官方教程做做补充的,没想到官方教程的质量还是相当高的,跟着 ...
- golang复用http.request.body
golang复用http.request.body 问题及场景 业务当中有需要分发http.request.body的场景.比如微信回调消息只能指定一个地址,所以期望可以复制一份消息发给其他服务.由服 ...
- kettle使用1-全表导入
1.新建转换 2.DB连接中,新建数据库连接 3.在输入中,选择表输入 选择连接的数据库和查询的sql的数据 4.再输出中,选择表输出 5.按住shift,建立数据连接 6.匹配数据字段映射
- Splashtop远程桌面再次增强:支持4K视频流
远程桌面工具,主流的有10款总有,国内用的比较多的有teamviewer.Splashtop.向日葵等.几款软件各有千秋,其中Splashtop最大的特性就是快速.流畅.产品无敌,运营佛系,哈哈.下面 ...