工作中常用JavaScript相关工具函数 (js判断函数,数组去重,对数组进行排序,判断数组是否有重复值,判断是否为身份证号码等),自动化测试(mocha + chai)
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib
src
test
.babelrc
.eslintignore
.eslintrc
.gitignore
.npmignore
README.md
README_en.md
package.json
webpack.config.js

README.md

Downloads Version License

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('liufulin90@163.com'); // true
  js_arrayIsRepeat([1, 2, 3, 4, 5, 2]); // true

PS: 以下所有示例均为方式一的调用

目录索引

自动化测试

Is JS判断函数

Array

Number

String

Other

详细函数及方法

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('liufulin90@163.com') // 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('liufulin90@163.com') 结果为 true
      ✓ JSCT.isEmail('1212345678.901234') 结果为 false
      ✓ JSCT.isEmail('1212345678@9012.123') 结果为 false
    isUrl函数判断是否为url
      ✓ JSCT.isUrl('http://fen.linxins.com') 结果为 true
      ✓ JSCT.isUrl('http://fen.linxins.com/#wechatSubscriptionItem') 结果为 true
      ✓ JSCT.isUrl('liufulin90@163.com') 结果为 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电子书阅读器 liufulin90@163.com