让你减少加班的15条高效JS技巧!记得收藏哦

延迟函数delay

const delay = ms => new Promise((resolve, reject) => setTimeout(resolve, ms))
 ​
 const getData = status => new Promise((resolve, reject) => {
     status ? resolve('done') : reject('fail')
 })
 const getRes = async (data) => {
     try {
         const res = await getData(data)
         const timestamp = new Date().getTime()
         await delay(1000)
         console.log(res, new Date().getTime() - timestamp)
     } catch (error) {
         console.log(error)
     }
 }
 getRes(true) // 隔了1秒

分割指定长度的元素数组

const listChunk = (list, size = 1, cacheList = []) => {
     const tmp = [...list]
     if (size <= 0) {
         return cacheList
     }
     while (tmp.length) {
         cacheList.push(tmp.splice(0, size))
     }
     return cacheList
 }
 ​
 console.log(listChunk([1, 2, 3, 4, 5, 6, 7, 8, 9])) // [[1], [2], [3], [4], [5], [6], [7], [8], [9]]
 console.log(listChunk([1, 2, 3, 4, 5, 6, 7, 8, 9], 3)) // [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
 console.log(listChunk([1, 2, 3, 4, 5, 6, 7, 8, 9], 0)) // []
 console.log(listChunk([1, 2, 3, 4, 5, 6, 7, 8, 9], -1)) // []

获取数组交集

const intersection = (list, ...args) => list.filter(item => args.every(list => list.includes(item)))
 ​
 console.log(intersection([2, 1], [2, 3])) // [2]
 console.log(intersection([1, 2], [3, 4])) // []

函数柯里化

const curring = fn => {
     const { length } = fn
     const curried = (...args) => {
         return (args.length >= length
               ? fn(...args)
               : (...args2) => curried(...args.concat(args2)))
     }
     return curried
 }
 ​
 const listMerge = (a, b, c) => [a, b, c]
 const curried = curring(listMerge)
 console.log(curried(1)(2)(3)) // [1, 2, 3]
 ​
 console.log(curried(1, 2)(3)) // [1, 2, 3]
 ​
 console.log(curried(1, 2, 3)) // [1, 2, 3]

字符串前面空格去除与替换

const trimStart = str => str.replace(new RegExp('^([\\s]*)(.*)$'), '$2')
 console.log(trimStart(' abc ')) // abc
 console.log(trimStart('123 ')) // 123

字符串后面空格去除与替换

const trimEnd = str => str.replace(new RegExp('^(.*?)([\\s]*)$'), '$1')
 console.log(trimEnd(' abc ')) //   abc
 console.log(trimEnd('123 ')) // 123

获取当前子元素是其父元素下子元素的排位

const getIndex = el => {
     if (!el) {
         return -1
     }
     let index = 0
     do {
         index++
     } while (el = el.previousElementSibling);
     return index
 }

获取当前元素相对于document的偏移量

const getOffset = el => {
     const {
         top,
         left
     } = el.getBoundingClientRect()
     const {
         scrollTop,
         scrollLeft
     } = document.body
     return {
         top: top + scrollTop,
         left: left + scrollLeft
     }
 }

获取元素类型

const dataType = obj => Object.prototype.toString.call(obj).replace(/^\[object (.+)\]$/, '$1').toLowerCase();

判断是否是移动端

const isMobile = () => 'ontouchstart' in window

fade动画

const fade = (el, type = 'in') {
     el.style.opacity = (type === 'in' ? 0 : 1)
     let last = +new Date()
     const tick = () => {
         const opacityValue = (type === 'in'
                             ? (new Date() - last) / 400
                             : -(new Date() - last) / 400)
         el.style.opacity = +el.style.opacity + opacityValue
         last = +new Date()
         if (type === 'in'
           ? (+el.style.opacity < 1)
           : (+el.style.opacity > 0)) {
             requestAnimationFrame(tick)
         }
     }
     tick()
 }

将指定格式的字符串解析为日期字符串

const dataPattern = (str, format = '-') => {
     if (!str) {
         return new Date()
     }
     const dateReg = new RegExp(`^(\\d{2})${format}(\\d{2})${format}(\\d{4})$`)
     const [, month, day, year] = dateReg.exec(str)
     return new Date(`${month}, ${day} ${year}`)
 }
 ​
 console.log(dataPattern('12-25-1995')) // Mon Dec 25 1995 00:00:00 GMT+0800 (中国标准时间)

禁止网页复制粘贴

const html = document.querySelector('html')
 html.oncopy = () => false
 html.onpaste = () => false

### input框限制只能输入中文

const input = document.querySelector('input[type="text"]')
 const clearText = target => {
     const {
         value
     } = target
     target.value = value.replace(/[^\u4e00-\u9fa5]/g, '')
 }
 input.onfocus = ({target}) => {
     clearText(target)
 }
 input.onkeyup = ({target}) => {
     clearText(target)
 }
 input.onblur = ({target}) => {
     clearText(target)
 }
 input.oninput = ({target}) => {
     clearText(target)
 }

去除字符串中的html代码

const removeHTML = (str = '') => str.replace(/<[\/\!]*[^<>]*>/ig, '')
 console.log(removeHTML('<h1>哈哈哈哈<呵呵呵</h1>')) // 哈哈哈哈<呵呵呵
(0)

相关推荐

  • javascript 数组 对象的一些方法记录

    记录一下常用的数组和对象的一些方法 数组 push() 数组后添加元素 // 作用:把一个元素或多个元素,从数组后面添加到数组里面: // 参数:添加的数据 // 返回:添加后的数组的长度: let ...

  • JS截取类字符串方法

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  • 排坑&#183;IPhone&IOS中不兼容正则中的断言匹配

    阅文时长 | 1.14分钟 字数统计 | 1834.4字符 主要内容 | 1.问题切入 2.什么是断言匹配 3.断言匹配的替换方案 4.声明与参考资料 『排坑·IPhone&IOS中不兼容正则 ...

  • 前端面试题整理——手写bind函数

    var arr = [1,2,3,4,5] console.log(arr.slice(1,4)) console.log(arr) Function.prototype.bind1 = functi ...

  • 5个鲜为人知的JavaScript功能将改善你的代码

    WEB前端开发社区 今天 今天,我想分享一些JavaScript功能的内容,你应该在日常代码中使用这些功能,希望今天的内容对你有所帮助. 1.JavaScript字符串填充 如果你在2016年就使用J ...

  • 前端面试题整理——手写简易jquery

    class jQuery { constructor(selector) { const result = document.querySelectorAll(selector) console.lo ...

  • JavaScript 奇怪又实用的知识又增加了 6 个

    来源 | 前端印象 作者 | 零一 今天给大家带来一些JavaScript的冷知识,可能你有所耳闻,但也有可能会让你大吃一惊.废话不多说,一起来看看吧! 一.解构小技巧 平常我们需要用到一个嵌套多层的 ...

  • js去除字符串的最后一位

    使用slice方法 /** * slice(start,end) * start 要截取的字符串的起始下标 如果为负数从后面开始算起 -1指的是字符串的最后一位 * end 要截取的字符串的结尾下标 ...

  • 讲再多的时间管理,都不如这15条高效法则

    来源 l 笔记侠(ID:Notesman) 在这个世界的钟表上,你可曾感受到,自己就像一个齿轮,不停地旋转? 社会不断进步.活是干不完的--你却陷入了恶性循环:没有自我学习的时间?陪家人的时间越来越短 ...

  • 再多的时间管理,都不如这15条高效法则

    加入正能量爆表的逆境研习社 今天是2021年的第084天 距离2021年结束还有281天 今晚逆习主题:高效法则 逆习君说✎ 时间是你最宝贵最稀缺的资源. 但随着社会节奏的加速,每个人似乎都陷入了恶性 ...

  • 15条高效法则,敌过99%的时间管理技巧

    你可曾感受到,自己就像一个齿轮,不停地旋转? 生活节奏越来越快.活却干也干不完--你陷入了恶性循环:没有自我学习的时间?陪家人的时间越来越短? 其实,高效的时间管理并没有那么高深,相信下文分享的15种 ...

  • 生活小妙招大全,生活小常识,日常小窍门15条生活小技巧

    蔬菜保鲜法: 有些蔬菜直接放在冰箱里不行,放在外边也容易坏掉,今天推荐两个小妙招,可以保鲜好多天.一种方法是用大白菜的叶子包裹青菜:第二种方法是用旧报纸包裹蔬菜,包裹好后放入保鲜膜中,如果没有的保鲜膜 ...

  • 销售技巧:10条高效沟通技巧,助你成为销售冠军!

    的 销售知识解析 8月10日 表达的结构化思维 记住了,重要的工作沟通的第一原则是结论先行,第一句话就让别人知道你讲话的重点是什么,然后用第一点.第二点.第三点的方式逐次澄清你的思想,最后再做一个总结 ...

  • 15条Allegro操作技巧,老司机都不一定知道!

    电梯直达 楼主 夜行书生发表于 2019-12-16 16:53|只看该作者|只看大图 |倒序浏览|阅读模式 Cadence Allegro是目前的主流PCB设计软件之一,具有功能集成化.功能组件化. ...

  • 高清动态图:十四条经络一目了然!记得收藏!

    一.膀胱经 中医讲一通百通,一堵百堵,您的经络有很多的气节点堵塞,每次帮您疏通的时候会一点点的将您经络的气节点化解,疏散,排出体内风.寒.署.湿.燥.毒素从而达到百脉通,除百病的功效,特别针对现代人的 ...

  • 紫砂壶定价的9条参考标准,记得收藏看看

    紫砂壶怎么定价的? 紫砂壶到底怎么定价的呢?为什么有的壶贵,有的壶便宜呢? 很多新接触紫砂壶的壶友对这个问题很迷茫,甚至在买壶的时候,因为不懂其中的原理,走了不少弯路,花了冤枉钱,今天小编就整理了12 ...

  • 36条常用Excel技巧,收藏备用!

    Excel表格:表格制作excel教程36条常用Excel技巧,收藏备用! 1.两列数据查找相同值对应的位置 =MATCH(B1,A:A,0) 2.已知公式得结果 定义名称=EVALUATE(Shee ...