npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

js-common-tools

v1.0.3

Published

JS常用工具函数

Readme

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判断函数

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('[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

自动化测试结果

License

(The MIT License)

Copyright (c) 2016 linxins React电子书阅读器 [email protected]