js-common-tools
js-common-tools copied to clipboard
工作中常用JavaScript相关工具函数 (js判断函数,数组去重,对数组进行排序,判断数组是否有重复值,判断是否为身份证号码等),自动化测试(mocha + chai)
js-common-tools
JS ES6 writing tools based on function
基于JS ES6 写法相关工具函数
安装
通过npm安装:
$ npm install js-common-tools
引入工具包
方式一
import * as JSCT from 'js-common-tools'
方式二:
如果直接引入的是 lib/js-common-tools.xxx.js
的话,所有的函数都已经全部注入到 window
对象中。
其中函数有一个前缀 js_
,目的是避免跟其他框架函数有所冲突。
<script src="lib/js-common-tools.xxx.js"></script>
调用示例:
js_isEmail('[email protected]'); // true
js_arrayIsRepeat([1, 2, 3, 4, 5, 2]); // true
PS: 以下所有示例均为方式一的调用
目录索引
自动化测试
- 测试报告
- 测试结果
Is JS判断函数
- isNumber 判断是否为数字
- isPrimes 判断一个数是否为素数(质数)
- isBoolean 判断是否为布尔
- isString 判断是否为字符串
- isNull 判断是否是null
- isUndefined 判断是否未定义
- isObject 判断是否为对象
- isFunction 判断是否为函数
- isArray 判断是否为数组
- isPrice 判断是否为正确金额
- isCreditCard 判断是否为信用卡
- isEmail 判断是否为正确邮箱
- isUrl 判断是否为url
- isPhone 判断是否为手机号
- isIdentityCard 判断是否为身份证号码
Array
- arrayUnique 数组去重
- arrayQuickSort 对数组进行排序
- isArray 判断是否为数组
- inArray 判断值是否在数组中
- arrayIsRepeat 判断数组是否有重复值
Number
- getRandomInt 获得指定区间的随机整数
- toFixedDecimal 返回指定小数位数的十进制
- isPrice 判断是否为正确金额
- getPrimes 获取两个数之间的所有素数(质数)
- accAdd 浮点数加法运算 0.1 + 0.2 = 0.3
- accSub 浮点数减法运算 0.5 - 0.4 = 0.1
- accMul 浮点数乘法运算 0.1 * 3 = 0.3
- accDiv 浮点数除法运算 0.3 / 3 = 0.1
String
- trimAll 清除字符中所有空格
- trimL 清除字符中左边空格
- trimR 清除字符中右边空格
- isNullOrEmpty 判断是否为空
- getUUID 返回给定长度的唯一标识符
- sprintf 把格式数据写成串
- isCreditCard 判断是否为信用卡
- isEmail 判断是否为正确邮箱
- isUrl 判断是否为url
- isPhone 判断是否为手机号
- isIdentityCard 判断是否为身份证号码
Other
- cookie
- store localStorage,sessionStorage
- Timer 计时器
- sleep 睡眠延迟
- getNowTimeFormat 获取当前时间的格式化日期
- timestampFormat 将时间戳格式化
- dateStr2timestamp 时间字符串转时间戳
- getImageWidthHeight 获取图片的长宽
- getWeekByDate 获取某一时间所在的周数
- getWeekDaysByYearIndex 获取某年的第几周包含的日期
- getFurtureWeeksInfo 获得指定日期的未来十周信息
- getMonthStartEndtDayTimestamp 获取指定时间所在月份的第一天开始时刻和最后一天最后时刻的时间戳(秒)
详细函数及方法
Is JS判断函数
isNumber
判断是否为数字
/**
* 判断是否为数字
* console.log(JSCT.isNumber(1237)); // true
* console.log(JSCT.isNumber('ss')); // false
* @param value
* @returns {boolean}
*/
JSCT.isNumber(1237) // true
isPrimes
判断一个数是否为素数(质数)
/**
* 判断一个数是否为素数(质数)
* console.log(JSCT.isPrimes(9)); // false
* console.log(JSCT.isPrimes(97)); // true
* @param number
* @returns {boolean} true: 是素数 false: 不是素数
*/
JSCT.isPrimes(97) // true
isBoolean
判断是否为布尔
/**
* 判断是否为布尔
* console.log(JSCT.isBoolean(true)); // true
* console.log(JSCT.isBoolean('ss')); // false
* @param value
* @returns {boolean}
*/
JSCT.isBoolean(true) // true
isString
判断是否为字符串
/**
* 判断是否为字符串
* console.log(JSCT.isString(sss)); // true
* console.log(JSCT.isString(234)); // false
* @param value
* @returns {boolean}
*/
JSCT.isString('sss') // true
isNull
判断是否是null
/**
* 判断是否为字符串
* console.log(JSCT.isNull(null)); // true
* console.log(JSCT.isNull(234)); // false
* @param value
* @returns {boolean}
*/
JSCT.isNull(null) // true
isUndefined
判断是否未定义
/**
* 判断是否未定义
* @param value
* @returns {boolean}
*/
var a = 1
JSCT.isUndefined(a) // false
isObject
判断是否为对象
/**
* 判断是否为对象
* console.log(JSCT.isObject({})); // true
* console.log(JSCT.isObject(234)); // false
* @param value
* @returns {boolean}
*/
JSCT.isObject({}) // true
isFunction
判断是否为函数
/**
* 判断是否为函数
* @param value
* @returns {boolean}
*/
JSCT.isFunction({}) // false
JSCT.isFunction(function() {
// TODO
}) // true
Array
arrayUnique
数组去重
/**
* 数组去重
*
* 1.创建一个新的数组存放结果
* 2.创建一个空对象
* 3.判断数组值是否已经保存在object中,未保存则push到新数组并用object[arrayItem]=1的方式记录保存
*
* @param arr
* @returns {Array}
* @constructor
* eg:
* var arr = [5, 3, [8, 8, {b: 1}], 55, [8, 8, {b: 1}], {a: 1}, 3, {a: 1}, 77, 55, 99];
* console.log(arr)
* console.log(arrayUnique(arr))
*/
arr.arrayUnique()
JSCT.arrayUnique(arr)
arrayQuickSort
数组排序(快排)
'asc': 升序(默认) 'desc': 降序
/**
* 对数组进行排序(排序)
*
*(1)在数据集之中,选择一个元素作为”基准”(pivot)。
*(2)所有小于”基准”的元素,都移到”基准”的左边;所有大于”基准”的元素,都移到”基准”的右边。
*(3)对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
*
* @param arr
* @returns {*}
* @constructor
* eg:
* var arr = [5, 3, 55, 3,77, 55, 99, 2, 4];
* console.log(arr);
* console.log(arrayQuickSort(arr))
*/
arr.arrayQuickSort('desc')
JSCT.arrayQuickSort(arr, 'desc')
isArray
判断是否为数组
/**
* Checks if value is array or not
* 判断是否为数组
*
* isArray([]) => true
*
* @param v
* @return {Boolean}
*/
JSCT.isArray(value)
inArray
判断值是否在数组中
/**
* 判断值是否在数组中
*
* @param needle 被判断的值
* @param haystack 数组
* @param strict: 严格模式true,非严格false
* @returns {boolean}
*/
JSCT.inArray(1, ['1', 'ss'], true) // false
JSCT.inArray(1, [1, 'ss'], true) // true
arrayIsRepeat
判断数组是否有重复值
/**
* 判断数组是否有重复值
*
* @param arr 需要判断的数组
* @param strict: 严格模式true,非严格false
* @returns {boolean} ture: 有重复值 false: 没有重复值
*/
console.log(JSCT.arrayIsRepeat([1, 2, 3, 4, 5])); // false
console.log(JSCT.arrayIsRepeat([1, 2, 3, 4, 5, 2])); // true
console.log(JSCT.arrayIsRepeat([1, 2, 3, 4, 5, "2"])); // true
console.log(JSCT.arrayIsRepeat([1, 2, 3, 4, 5, "2"], true)); // false
Number
getRandomInt
获得指定区间的随机整数,默认1至100.
/**
* 获取指定区间随机数值
* getRandomInt(1, 100) => 56
*
* @param {Number} min
* @param {Number} max
* @return {Number}
*/
JSCT.getRandomInt(1, 20)
toFixedDecimal
返回指定小数位数的十进制,默认两位小数
/**
* 返回指定小数位数的十进制,默认两位小数
*
* toFixedDecimal(1.689442324, 2) => 1.68
*
* @param number
* @param precision
* @returns {number}
*/
JSCT.toFixedDecimal(1.689442324, 2) // 1.68
isPrice
判断是否为正确金额
/**
* 判断是否为正确金额
* console.log(JSCT.isPrice('12.37')); // true
* console.log(JSCT.isPrice('12&37')); // false
* @param value
* @returns {boolean}
*/
JSCT.isPrice('12.37') // true
getPrimes
获取两个数之间的所有素数(质数)
/**
* 获取两个数之间的所有素数(质数)
*
* 1到30的数中所有质数:console.log(JSCT.getPrimes(1, 30)) // 2,3,5,7,11,13,17,19,23,29
* @param start 开始数
* @param end 结束数
* @returns {*}
*/
JSCT.getPrimes(1, 30) // 2,3,5,7,11,13,17,19,23,29
accAdd
浮点数加法运算 0.1 + 0.2 = 0.3
/**
* 浮点数加法运算 0.1 + 0.2 = 0.3
* JSCT.accAdd(0.1, 0.2) 之和等于 0.3 ,即(0.1 + 0.2 == 0.3) true
* @param num1
* @param num2
*/
JSCT.accAdd(0.1, 0.2) // 0.3
accSub
浮点数减法运算 0.5 - 0.4 = 0.1
/**
* 浮点数减法运算 0.5 - 0.4 = 0.1
* JSCT.accSub(0.5, 0.4) 之差等于 0.1 ,即(0.5 - 0.4 == 0.1) true
* @param num1
* @param num2
*/
JSCT.accSub(0.5, 0.4) // 0.1
accMul
浮点数乘法运算 0.1 * 3 = 0.3
/**
* 浮点数乘法运算 0.1 * 3 = 0.3
* JSCT.accMul(0.1, 3) 之积等于 0.3 ,即(0.1 * 3 == 0.3) true
* @param num1
* @param num2
*/
JSCT.accMul(0.1, 3) // 0.3
accDiv
浮点数除法运算 0.3 / 3 = 0.1
/**
* 浮点数除法运算 0.3 / 3 = 0.1
* JSCT.accDiv(0.3, 3) 之商等于 0.1, 即(0.3 / 3 == 0.1) true
* @param num1
* @param num2
*/
JSCT.accDiv(0.3, 3) // 0.1
String
trimAll
清除字符中所有空格
str.trimAll()
trimL
清除字符中左边空格
str.trimL()
trimR
清除字符中右边空格
str.trimR()
isNullOrEmpty
判断是否为空,为空返回true,否则返回false。可以做递归检查
/**
* 判断是否为空,为空返回true,否则返回false。可以做递归检查
*
* isNullOrEmpty([]) => true
* isNullOrEmpty(['']) => false
* isNullOrEmpty([''], true) => true (Recursive check)
*
* @param v Value to be checked 被检查的值
* @param recursive True for recursive check, False for only top item check 是否递归
* @return {Boolean}
*/
JSCT.isNullOrEmpty([]) // true
JSCT.isNullOrEmpty([""]) // false
JSCT.isNullOrEmpty([""], true) // true (Recursive check)
getUUID
返回给定长度的唯一标识符.
/**
* 获得指定长度的唯一字符串
*
* getUUID(10);
* // => '3DaS435D2z'
* getUUID(10, false);
* // => 'cDaS435D2z'
*
* @param {Number} len
* @param {Boolean} first character must be alpha numeric char (for html id generation)
* @return {String}
* @api public
*/
JSCT.getUUID(20, true) // 长度20,true表示首字母为应为字母
JSCT.getUUID() // 默认长度32,首字母为英文字母
sprintf
把格式数据写成串
/**
* sprintf 把格式数据写成串
*
* @param str
* @returns {string}
*/
JSCT.sprintf('this values, num1: %s , num2: %s , num3: %s', 1, 2, 3)
// this values, num1: 1 , num2: 2 , num3: 3
isCreditCard
判断是否为信用卡
/**
* 判断是否为信用卡
*
* @param value
* @returns {boolean}
*/
JSCT.isCreditCard('5212345678901234') // true
isEmail
判断是否为正确邮箱
/**
* 判断是否为正确邮箱
*
* @param value
* @returns {boolean}
*/
JSCT.isEmail('[email protected]') // true
isUrl
判断是否为url
/**
* 判断是否为url
*
* @param value
* @returns {boolean}
*/
JSCT.isUrl('http://www.linxins.com') // true
isPhone
判断是否为手机号
/**
* 判断是否为手机号
*
* JSCT.isPhone('18785465548') // true
* JSCT.isPhone('12785465548') // false
*
* @param value
* @returns {boolean}
*/
JSCT.isPhone('18785465548') // true
JSCT.isPhone('12785465548') // false
isIdentityCard
判断是否为身份证号码
/**
* 判断是否为身份证号码
* @param sId
* @returns {boolean}
*/
JSCT.isIdentityCard('231421199406042025') // false
// ps: 输入自己的身份证号做测试,返回为true
Other
cookie
获取cookie和设置cookie
// 设置
JSCT.cookie('test', '123', 7*24*60*60) // 将(123)存入cookie,键为'test',有效期为7天
// 获取
JSCT.cookie('test') // 123
// 删除
JSCT.remove('test') // 将键为‘test’的cookie值删除掉
store
本地存储(localstorage , sessionStorage)
JSCT.getLocalStorage(key)
JSCT.setLocalStorage(key, value)
JSCT.getSessionStorage(key)
JSCT.setSessionStorage(key, value)
Timer
这是一个计时器工具
let tt = new JSCT.Timer()
tt.start(function (timeStr) {
console.log(timeStr)// do something. ret: 00:03:35
})
setTimeout(()=>{
tt.stop()
}, 3000)
sleep
利用async/await做睡眠延迟sleep后面的代码执行
/**
* const testAsync = async () => {
* console.log(1)
* await sleep(2000)
* console.log(2)
* }
* 利用async/await做睡眠延迟sleep后面的代码执行
*
* @param timeout
* @returns {Promise}
*/
const testAsync = async () => {
console.log(1)
await JSCT.sleep(2000)
console.log(2) // 两秒后显示 2
}
testAsync()
getNowTimeFormat
获取当前时间的格式化日期
/**
* 获取当前时间的格式化日期
* @param string Fmt eg:Y-m-d H:i:s
* @param boolean hasZero eg:true|false
* @returns {string}
*/
JSCT.getNowTimeFormat() // 2017-03-12 17:30:45
timestampFormat
将时间戳格式化
/**
* 将时间戳格式化
* @param number timestamp eg:1465963958000 length:13 or 1465963958 length:10
* @param string Fmt eg:Y-m-d H:i:s
* @param boolean hasZero eg:true|false
* @returns {string}
*/
JSCT.timestampFormat(1489142869000) // 2017-03-10 18:47:49
dateStr2timestamp
时间字符串转时间戳
/**
* 时间字符串转时间戳
* @param string dateStr eg:2016-06-16 16:15:59
* @returns {number}
*/
JSCT.dateStr2timestamp('2016-06-16 16:15:59') // 1466064959000
getImageWidthHeight
获取图片的真是宽高,并做相应处理
<input type="file" id="uploader"/>
<input type="submit" id="submit" onclick="check()"/>
function check () {
var fileEl = document.getElementById('uploader');
/**
* 获取图片的真是宽高,并做相应处理
* @param file (png/jpg/gif) eg: [document.getElementById('fileid')] or $('#fileid')
* @param callback
*/
JSCT.getImageWidthHeight([fileEl], function (width, height) {
console.log(JSCT.sprintf('width: %s, height: %s', width, height))
})
}
getWeekByDate
获取某一时间所在的周数
/**
* 获取某一时间所在的周数
*
* @param date 日期,默认当前时间
* eg: Date('2017-01-01')
*/
console.log(JSCT.getWeekByDate(new Date('2017-01-03')))
getWeekDaysByYearIndex
获取某年的第几周包含的日期
/**
* 获取某年的第几周包含的日期
*
* @param year 哪一年,默认当前年
* @param index 第几周,默认第一周
* @returns {Array}
*/
console.log(JSCT.getWeekDaysByYearIndex(new Date(), 10))
getFurtureWeeksInfo
获得指定日期的未来十周信息
/**
* 获得指定日期的未来十周信息
*
* @param date 指定开始日,默认当前时间
* eg: new Date('2017-01-02')
* @param num 指定得到未来多少个周,默认10周
* @returns {Array}
*/
console.log(JSCT.getFurtureWeeksInfo(new Date('2017-01-02'), 2))
getMonthStartEndtDayTimestamp
获取指定时间所在月份的第一天开始时刻和最后一天最后时刻的时间戳(秒)
/**
* 获取指定时间所在月份的第一天开始时刻和最后一天最后时刻的时间戳(秒)
* eg: JSCT.getMonthStartEndtDayTimestamp(1500431715)
*
* @param time 时间戳 timestamp 默认当前时间(秒)
* @returns {{start: number, end: number}}
*/
console.log(JSCT.getMonthStartEndtDayTimestamp(1500431715)) // { start: 1498838400, end: 1501516799 }
console.log(JSCT.timestampFormat(JSCT.getMonthStartEndtDayTimestamp(1500431715).start, 'Y-m-d H:i:s')) // 2017-07-01 00:00:00
console.log(JSCT.timestampFormat(JSCT.getMonthStartEndtDayTimestamp(1500431715).end, 'Y-m-d H:i:s')) // 2017-07-31 23:59:59
testResult
自动化测试结果
Array相关函数测试 数组去重, arrayUnique 函数 ✓ JSCT.arrayUnique([3, 55, {a: 1}, 7, {a: 1}, {b: 2}, 55]) 结果为 [3, 55, { a: 1 }, 7, {b: 2}] ✓ JSCT.arrayUnique([5, 3, 55, {a: 1}, 77, 55]) 结果为 [5, 3, 55, { a: 1 }, 77] ✓ JSCT.arrayUnique([5, 3, [8, 8, {b: 1}], 55, [8, 8, {b: 1}], {a: 1}, 3, {a: 1}, 77, 55, 99]) 结果为 [5, 3, [ 8, 8, { b: 1 } ], 55, { a: 1 }, 77, 99] 对数组进行排序(默认升序), arrayQuickSort 函数 ✓ JSCT.arrayUnique([5, 3, 55, 3, 77, 55, 99, 2, 4]) 升序结果为 [2, 3, 3, 4, 5, 55, 55, 77, 99] ✓ JSCT.arrayUnique([5, 3, 55, 3, 77, 55, 99, 2, 4], "desc") 将序结果为 [99, 77, 55, 55, 5, 4, 3, 3, 2] ✓ [5, 3, 55, 3, 77, 55, 99, 2, 4].arrayQuickSort("desc") 将序结果为 [99, 77, 55, 55, 5, 4, 3, 3, 2] isArray函数判断是否为数组 ✓ JSCT.isArray([5]) 结果为 true ✓ JSCT.isArray([]) 结果为 true ✓ JSCT.isArray({}) 结果为 false inArray函数判断值是否在数组中 ✓ JSCT.inArray(3, [3, 5]) 结果为 true ✓ JSCT.inArray("3", [3, 5]) 结果为 true 非严格模式 ✓ JSCT.inArray("3", [3, 5], true) 结果为 false 严格模式 arrayIsRepeat函数判断数组是否有重复值 ✓ JSCT.arrayIsRepeat([3, 5]) 结果为 false ✓ JSCT.arrayIsRepeat([3, 3, 5]) 结果为 true 非严格模式 ✓ JSCT.arrayIsRepeat([3, "3", 5]) 结果为 false 严格模式 JS判断函数,解决80%类型判断问题 isNumber 函数 ✓ JSCT.isNumber(100) 结果为 true ✓ JSCT.isNumber("12") 结果为 false isBoolean 函数 ✓ JSCT.isBoolean(true) 结果为 true ✓ JSCT.isBoolean("12") 结果为 false isString 函数 ✓ JSCT.isString("sss") 结果为 true ✓ JSCT.isString(true) 结果为 false isNull 函数 ✓ JSCT.isNull(null) 结果为 true ✓ JSCT.isNull("123") 结果为 false ✓ JSCT.isNull(true) 结果为 false isUndefined 函数 ✓ JSCT.isUndefined() 结果为 true ✓ JSCT.isUndefined("") 结果为 false ✓ JSCT.isUndefined(null) 结果为 false ✓ JSCT.isUndefined(0) 结果为 false isObject 函数 ✓ JSCT.isObject() 结果为 false ✓ JSCT.isObject("") 结果为 false ✓ JSCT.isObject(null) 结果为 true ✓ JSCT.isObject({}) 结果为 true ✓ JSCT.isObject([1]) 结果为 true isFunction 函数 ✓ JSCT.isFunction() 结果为 false ✓ JSCT.isFunction(function () {}) 结果为 true Number相关函数测试 getRandomInt函数获取指定区间随机数值 ✓ JSCT.getRandomInt(1, 100) 结果小于100大于1 ✓ JSCT.getRandomInt(500, 600) 结果小于600大于500 toFixedDecimal函数返回指定小数位数的十进制,默认两位小数(四舍五入) ✓ JSCT.toFixedDecimal(1.689442324, 2) 结果为1.69 ✓ JSCT.toFixedDecimal(1.681142324, 3) 结果为1.681 ✓ JSCT.toFixedDecimal(1.681152324, 4) 结果为1.6812 isPrice函数判断是否为正确金额 ✓ JSCT.isPrice(11.35) 结果为 true ✓ JSCT.isPrice(9.3) 结果为 true ✓ JSCT.isPrice(1.689) 结果为 false ✓ JSCT.isPrice("123#d") 结果为 false String相关函数测试 trim去除空格函数测试 ✓ 清除字符中所有空格,"a b c d ".trimAll()结果为"abcd" ✓ 清除字符中中左边空格," a b c d".trimL()结果为"a b c d" ✓ 清除字符中中右边空格,"a b c d ".trimR()结果为"a b c d" isNullOrEmpty函数判断是否为空 ✓ JSCT.isNullOrEmpty(0) 结果为 true ✓ JSCT.isNullOrEmpty(1) 结果为 false ✓ JSCT.isNullOrEmpty("") 结果为 true ✓ JSCT.isNullOrEmpty([]) 结果为 false ✓ JSCT.isNullOrEmpty([], true) 结果为 true。 (ps: 递归检查,检查内部值) ✓ JSCT.isNullOrEmpty([""]) 结果为 false ✓ JSCT.isNullOrEmpty([""], true) 结果为 false。 (ps: 递归检查,检查内部值) ✓ JSCT.isNullOrEmpty([null]) 结果为 false ✓ JSCT.isNullOrEmpty([null], true) 结果为 true。 (ps: 递归检查,检查内部值) ✓ JSCT.isNullOrEmpty({}) 结果为 false ✓ JSCT.isNullOrEmpty({}, true) 结果为 true。 (ps: 递归检查,检查内部值) isString函数判断是否为字符串 ✓ JSCT.isString("") 结果为 true ✓ JSCT.isString(12) 结果为 false ✓ JSCT.isString("123") 结果为 true ✓ JSCT.isString(null) 结果为 false getUUID函数获得指定长度的唯一字符串 ✓ JSCT.getUUID(32).length 结果为 32 sprintf函数把格式数据写成串 ✓ JSCT.sprintf('你好%s,你了解%s吗?', 'Jack', 'Mocha') 结果为: '你好Jack,你了解Mocha吗?' isCreditCard函数判断是否为信用卡 ✓ JSCT.isCreditCard('5212345678901234') 结果为 true ✓ JSCT.isCreditCard('1212345678901234') 结果为 false isEmail函数判断是否为正确邮箱 ✓ JSCT.isEmail('[email protected]') 结果为 true ✓ JSCT.isEmail('1212345678.901234') 结果为 false ✓ JSCT.isEmail('[email protected]') 结果为 false isUrl函数判断是否为url ✓ JSCT.isUrl('http://fen.linxins.com') 结果为 true ✓ JSCT.isUrl('http://fen.linxins.com/#wechatSubscriptionItem') 结果为 true ✓ JSCT.isUrl('[email protected]') 结果为 false ✓ JSCT.isUrl('fff://baidu.com') 结果为 false isPhone函数判断是否为手机号 ✓ JSCT.isPhone(18782943043) 结果为 true ✓ JSCT.isPhone(19012546653) 结果为 false ✓ JSCT.isPhone(256448) 结果为 false isIdentityCard函数判断是否为身份证号码 ✓ JSCT.isIdentityCard('411324199010153310') 结果为 false 77 passing (19ms)
License
(The MIT License)
Copyright (c) 2016 linxins React电子书阅读器 [email protected]