工具函数

用于工程化开发,记录,备用

返回 [min, max) 间的随机整数

/** 返回 [min, max) 间的随机整数 */
export function getRandom(min, max) {
return Math.floor(Math.random() * (max - min) + min)
}

返回随机id

/**
* 返回随机id
* @returns {String}
*/
export function randomId() {
const char = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
let result = ''
for (let i = 0; i < 16; i++) {
result += char[getRandom(0, char.length)]
}
return result
}

判断一个值是否是Object

/**
* 判断一个值是否是Object
* @param {*} value
* @returns {Boolean}
*/
export function isObject(value) {
return Object.prototype.toString.call(value) === '[object Object]'
}

判断value是否为空

/**
* 判断value是否为空
* @param {*} value
* @returns {Boolean}
*/
export function isEmpty(value) {
if (value === null || typeof value === 'undefined') {
return true
}
if (typeof value === 'number' && isNaN(value)) {
return true
}
if (typeof value === 'string' && value === '') {
return true
}
if (Array.isArray(value) && value.length <= 0) {
return true
}
if (isObject(value) && Object.keys(value).length <= 0) {
return true
}
return false
}

判断value是否不为空

/**
* 判断value是否不为空
* @param {*} value
* @returns {Boolean}
*/
export function isNotEmpty(value) {
return !isEmpty(value)
}

赋值对象属性

/**
* 将origin中的属性赋值到target中
* @param {Object} target 目标对象
* @param {Object} origin 源对象
* @returns {Object}
*/
export function copyProp(target, origin) {
if (!isObject(target) || !isObject(origin)) {
throw new Error('Argument must be of object type!')
}
if (isEmpty(origin)) {
return target
}
for (const key in origin) {
target[key] = origin[key]
}
return target
}

深拷贝

仅支持对象和数组

/** 深拷贝 */
export function deepClone(value) {
if (typeof value !== 'object' || isEmpty(value)) {
return value
}
let result = Array.isArray(value) ? [] : {}
for (const key in value) {
result[key] = deepClone(value[key])
}
return result
}

模拟异步延时

/**
* 模拟异步延时
* @param {Number} [duration=500] 延迟的时间(ms)
* @returns {Promise}
*/
export function delay(duration = 500) {
return new Promise((resolve) => setTimeout(resolve, duration))
}

函数只调用一次函数

/**
* 函数只调用一次函数
* @param {Function} fn
* @returns {Function}
*/
export function once(fn) {
let executed = false
return () => {
if (!executed) {
executed = true
fn.apply(this, ...arguments)
}
}
}

防抖

/**
* 防抖
* @param {Function} fn 要进行防抖的函数
* @param {Number} [duration=100] 延迟时间
* @returns {Function}
*/
export function debounce(fn, duration = 100) {
let timer = null
return (...args) => {
clearTimeout(timer)
timer = setTimeout(() => {
fn(...args)
}, duration)
}
}

节流

/**
* 节流
* @param {Function} fn 要节流的函数
* @param {Number} [duration=50] 延迟时间
* @returns
*/
export function throttle(fn, duration = 50) {
let mark = 0
return () => {
if (Date.now() - mark >= duration) {
fn.apply(this, arguments)
mark = Date.now()
}
}
}

返回顶部

/** 返回顶部 */
export function goTop() {
window.scroll({
top: 0,
left: 0,
behavior: 'smooth',
})
}

获取url参数

/**
* 获取url参数
* @param {String} [url=location.href] url地址,不传使用当前网站url
* @returns {Object}
*/
export function getUrlParams(url = location.href) {
const index = url.indexOf('?')
const result = {}
if (index === -1) {
return result
}
const arr = url.substring(index + 1).split('&')
for (let i = 0; i < arr.length; i++) {
const param = arr[i].split('=')
result[param[0]] = param[1]
}
return result
}

完整文件

/** 返回 [min, max) 间的随机整数 */
export function getRandom(min, max) {
return Math.floor(Math.random() * (max - min) + min)
} /**
* 返回随机id
* @returns {String}
*/
export function randomId() {
const char = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
let result = ''
for (let i = 0; i < 16; i++) {
result += char[getRandom(0, char.length)]
}
return result
} /**
* 判断一个值是否是Object
* @param {*} value
* @returns {Boolean}
*/
export function isObject(value) {
return Object.prototype.toString.call(value) === '[object Object]'
} /**
* 判断value是否为空
* @param {*} value
* @returns {Boolean}
*/
export function isEmpty(value) {
if (value === null || typeof value === 'undefined') {
return true
}
if (typeof value === 'number' && isNaN(value)) {
return true
}
if (typeof value === 'string' && value === '') {
return true
}
if (Array.isArray(value) && value.length <= 0) {
return true
}
if (isObject(value) && Object.keys(value).length <= 0) {
return true
}
return false
} /**
* 判断value是否不为空
* @param {*} value
* @returns {Boolean}
*/
export function isNotEmpty(value) {
return !isEmpty(value)
} /**
* 将origin中的属性赋值到target中
* @param {Object} target 目标对象
* @param {Object} origin 源对象
* @returns {Object}
*/
export function copyProp(target, origin) {
if (!isObject(target) || !isObject(origin)) {
throw new Error('Argument must be of object type!')
}
if (isEmpty(origin)) {
return target
}
for (const key in origin) {
target[key] = origin[key]
}
return target
} /** 深拷贝 */
export function deepClone(value) {
if (typeof value !== 'object' || isEmpty(value)) {
return value
}
let result = Array.isArray(value) ? [] : {}
for (const key in value) {
result[key] = deepClone(value[key])
}
return result
} /**
* 模拟异步延时
* @param {Number} [duration=500] 延迟的时间(ms)
* @returns {Promise}
*/
export function delay(duration = 500) {
return new Promise((resolve) => setTimeout(resolve, duration))
} /**
* 函数只调用一次函数
* @param {Function} fn
* @returns {Function}
*/
export function once(fn) {
let executed = false
return () => {
if (!executed) {
executed = true
fn.apply(this, ...arguments)
}
}
} /**
* 防抖
* @param {Function} fn 要进行防抖的函数
* @param {Number} [duration=100] 延迟时间
* @returns {Function}
*/
export function debounce(fn, duration = 100) {
let timer = null
return (...args) => {
clearTimeout(timer)
timer = setTimeout(() => {
fn(...args)
}, duration)
}
} /**
* 节流
* @param {Function} fn 要节流的函数
* @param {Number} [duration=50] 延迟时间
* @returns
*/
export function throttle(fn, duration = 50) {
let mark = 0
return () => {
if (Date.now() - mark >= duration) {
fn.apply(this, arguments)
mark = Date.now()
}
}
} /** 返回顶部 */
export function goTop() {
window.scroll({
top: 0,
left: 0,
behavior: 'smooth',
})
} /**
* 获取url参数
* @param {String} [url=location.href] url地址,不传使用当前网站url
* @returns {Object}
*/
export function getUrlParams(url = location.href) {
const index = url.indexOf('?')
const result = {}
if (index === -1) {
return result
}
const arr = url.substring(index + 1).split('&')
for (let i = 0; i < arr.length; i++) {
const param = arr[i].split('=')
result[param[0]] = param[1]
}
return result
}

JS工具函数的更多相关文章

  1. js工具函数《转载收藏》

    1.等待所有图片加载 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 var imgObjs = [], count = 0; rotate.prize ...

  2. 常用的js工具函数

    JS选取DOM元素的方法注意:原生JS选取DOM元素比使用jQuery类库选取要快很多1.通过ID选取元素document.getElementById('myid');2.通过CLASS选取元素do ...

  3. JS 工具函数 方法(其中js的crc32和php的crc32区别)

    var util = {}; util.indexOf = function (array, item) { for (var i = 0; i < array.length; i++) { i ...

  4. 更新常用的js工具函数

    在手机调试时打印代码<script src="https://cdn.bootcss.com/vConsole/3.3.0/vconsole.min.js"></ ...

  5. 封装一些常用的js工具函数-不定时更新(希望大家积极留言,反馈bug^_^)

    /*华丽------------------------------------------------------------------------------------------------ ...

  6. JS工具函数汇总

    备注:http://phpjs.org/  这个站点把PHP常用的方法用js实现了,推荐一下 1.从数组中随机获取几个不重复项 //从一个给定的数组arr中,随机返回num个不重复项 function ...

  7. js正则《转载收藏》

    \:转义字符.'\\n'匹配\n ^:开始位置.'^[0-9]'匹配以数字开头的字符,可以匹配'88DC',不可匹配'DC88' $:结束位置.'[0-9]$'匹配以数字结尾的字符,可以匹配'ab12 ...

  8. JavaScript常用工具函数

    检测数据是不是除了symbol外的原始数据 function isStatic(value) { return ( typeof value === 'string' || typeof value ...

  9. 你要的几个JS实用工具函数(持续更新)

    今天,我们来总结下我们平常使用的工具函数,希望对大家有用.1.封装fetch 源码: /** * 封装fetch函数,用Promise做回调 * @type {{get: (function(*=)) ...

  10. 转载 jQuery和js自定义函数和文件的方法(全网最全)

    jQuery和js自定义函数和文件的方法(全网最全)    版权声明:本文为像雾像雨又像风_http://blog.csdn.net/topdandan的原创文章,未经允许不得转载. https:// ...

随机推荐

  1. Moho Pro - Mac 上一款专业的二维动画制作软件,强大的功能让你尽情发挥创意

    Moho,以前被称为动画工作室专业版,是最好的质量的2D动画软件之一.这个程序是理想的专业人士寻找一个更有效的替代方法来创建动画,没有繁琐的详细逐帧处理.具有直观的界面和现成的人物和附加对象(卡通对象 ...

  2. AcWing刷题记录 - 2022

    AcWing 1813. 方块游戏 思路 枚举,题目说明不管哪一面向上都可以,所以就两面加起来取各个字母的最大值,最后N对字母的最大值相加就是答案 代码 #include<bits/stdc++ ...

  3. pysimplegui之popup弹出框

    弹出框其实跟信息框差不多,在写界面的时候经常用,具体如下 "高级呼叫"是以"弹出"开头的呼叫.它们是与用户沟通的最基本形式.它们以它们创建的窗口类型命名,即弹出 ...

  4. Rust中的into函数和from函数

    1.Rust中的into函数和from函数是做什么用的? into函数是Rust语言中的一个转换函数,它属于Into trait.它可以将一个类型转换为另一个类型.实现了From trait的类型会自 ...

  5. DG修复:修改密码文件导致归档不应用

    问题描述:重启完备库,之后发现主备同步状态异常,mrp进程状态显示applying log,但是v$datagaurd_stats视图中查询到归档日志并没有在应用.主库切换归档,可以正常传输过来,但是 ...

  6. 从零开始学Vue(二~三)—— Vue 实例 / 模板语法(插值、指令)

    概述 vue.js作为现在笔记热门的JS框架,使用比较简单易上手,也成为很多公司首选的JS框架. 但是对于初学者可能学起来有些麻烦,所以推出<从零开始学Vue>系列博客,本系列计划推出19 ...

  7. 百度松果菁英班--oj赛(第二次)

    目录 一.小码哥剪绳子 二.咖啡品鉴师小码哥 三.均分糖果 四.持盾 五.活动安排 六.甜品供应 七.斐波那契数列的组合 八.小码哥的布阵指挥 九.活动分组 十.外卖递送 一.小码哥剪绳子 题目:马上 ...

  8. OpenAI API

    OpenAI API Documentation https://platform.openai.com/docs/models/overview GPT 迭代过程 版本 发布时间 训练方案 参数量 ...

  9. Docker容器网络(基本网络模型)

    解析Docker的4种容器网络 默认网络模型 先介绍默认的网络模型: 安装docker后,输入ifconfig就会发现多了网卡中多了一个docker0: $ ifconfig docker0: fla ...

  10. 自定义Mybatis-plus插件(限制最大查询数量)

    自定义Mybatis-plus插件(限制最大查询数量) 需求背景 ​ 一次查询如果结果返回太多(1万或更多),往往会导致系统性能下降,有时更会内存不足,影响系统稳定性,故需要做限制. 解决思路 1.经 ...