JavaScript 是目前最流行的编程语言之一,正如大多数人所说:“如果你想学一门编程语言,请学JavaScript。”
FreeCodeCamp的创始人 Quincy Larson 在最近的一次采访中被问到哪种语言开发人员应该首先学习。他回答:“ JavaScript。”
软件正在吞噬世界,JavaScript正在吞噬软件。JavaScript每年都在变得越来越占主导地位,而且没人知道最终会取代它的是什么。”
如果您没有充分的理由学习一种新语言(例如您的工作要求您维护非JavaScript代码库),那么我的建议是着重于提高JavaScript的水平。
1、all
如果数组所有元素满足函数条件,则返回true。调用时,如果省略第二个参数,则默认传递布尔值。
1 | const all = ( arr, fn = Boolean ) => arr.every( fn ); |
2、allEqual
判断数组中的元素是否都相等。
1 | const allEqual = arr => arr.every( val => val === arr[ 0 ] ); |
3、approximatelyEqual
此代码示例检查两个数字是否近似相等,差异值可以通过传参的形式进行设置
1 | const approximatelyEqual = ( v1, v2, epsilon = 0.001 ) => Math.abs( v1 - v2 ) < epsilon; |
4、arrayToCSV
此段代码将没有逗号或双引号的元素转换成带有逗号分隔符的字符串即CSV格式识别的形式。
1 | const arrayToCSV = ( arr, delimiter = ',' ) => |
5、arrayToHtmlList
此段代码将数组元素转换成
1 | const arrayToHtmlList = ( arr, listID ) => |
6、attempt
此段代码执行一个函数,将剩余的参数传回函数当参数,返回相应的结果,并能捕获异常。
1 | const attempt = ( fn, ...args ) => { |
7、average
此段代码返回两个或多个数的平均数。
1 | const average = ( ...nums ) => nums.reduce( ( acc, val ) => acc + val, 0 ) / nums.length; |
8、averageBy
一个 map()函数和 reduce()函数结合的例子,此函数先通过 map() 函数将对象转换成数组,然后在调用reduce()函数进行累加,然后根据数组长度返回平均值。
1 | const averageBy = ( arr, fn ) => |
9、bifurcate
此函数包含两个参数,类型都为数组,依据第二个参数的真假条件,将一个参数的数组进行分组,条件为真的放入第一个数组,其它的放入第二个数组。这里运用了Array.prototype.reduce()
和 Array.prototype.push() 相结合的形式。
1 | const bifurcate = ( arr, filter ) => |
10、bifurcateBy
此段代码将数组按照指定的函数逻辑进行分组,满足函数条件的逻辑为真,放入第一个数组中,其它不满足的放入第二个数组
。这里运用了Array.prototype.reduce() 和 Array.prototype.push() 相结合的形式,基于函数过滤逻辑,通过 Array.prototype.push()
函数将其添加到数组中。
1 | const bifurcateBy = ( arr, fn ) => |
11、bottomVisible
用于检测页面是否滚动到页面底部。
1 | const bottomVisible = () => |
12、byteSize
此代码返回字符串的字节长度。这里用到了Blob对象,Blob(Binary Large
Object)对象代表了一段二进制数据,提供了一系列操作接口。其他操作二进制数据的API(比如File对象),都是建立在Blob对象基础上的,继承了它的属性和方法。生成Blob对象有两种方法:一种是使用Blob构造函数,另一种是对现有的Blob对象使用slice方法切出一部分。
1 | const byteSize = str => new Blob( [ str ] ).size; |
13、capitalize
将字符串的首字母转成大写,这里主要运用到了ES6的展开语法在数组中的运用。
1 | const capitalize = ( [ first, ...rest ] ) => |
14、capitalizeEveryWord
将一个句子中每个单词首字母转换成大写字母,这里中要运用了正则表达式进行替换。
1 | const capitalizeEveryWord = str => str.replace( /\b[a-z]/g, char => char.toUpperCase() ); |
15、castArray
此段代码将非数值的值转换成数组对象。
1 | const castArray = val => ( Array.isArray( val ) ? val : [ val ] ); |
16、compact
将数组中移除值为 false 的内容。
1 | const compact = arr => arr.filter( Boolean ); |
17、countOccurrences
统计数组中某个值出现的次数
1 | const countOccurrences = ( arr, val ) => arr.reduce( ( a, v ) => ( v === val ? a + 1 : a ), 0 ); |
18、Create Directory
此代码段使用 existSync() 检查目录是否存在,然后使用 mkdirSync() 创建目录(如果不存在)。
1 | const fs = require( 'fs' ); |
19、currentURL
返回当前访问的 URL 地址。
1 | const currentURL = () => window.location.href; |
20、dayOfYear
返回当前是今年的第几天
1 | const dayOfYear = date => |
21、decapitalize
将字符串的首字母转换成小写字母
1 | const decapitalize = ( [ first, ...rest ] ) => |
22、deepFlatten
通过递归的形式,将多维数组展平成一维数组。
1 | const deepFlatten = arr => [].concat( ...arr.map( v => ( Array.isArray( v ) ? deepFlatten( v ) : v ) ) ); |
23、default
去重对象的属性,如果对象中含有重复的属性,以前面的为准。
1 | const defaults = ( obj, ...defs ) => Object.assign( {}, obj, ...defs.reverse(), obj ); |
24、defer
延迟函数的调用,即异步调用函数。
1 | const defer = ( fn, ...args ) => setTimeout( fn, 1, ...args ); |
25、degreesToRads
此段代码将标准的度数,转换成弧度。
1 | const degreesToRads = deg => ( deg * Math.PI ) / 180.0; |
26、difference
此段代码查找两个给定数组的差异,查找出前者数组在后者数组中不存在元素。
1 | const difference = ( a, b ) => { |
27、differenceBy
通过给定的函数来处理需要对比差异的数组,查找出前者数组在后者数组中不存在元素。
1 | const differenceBy = ( a, b, fn ) => { |
28、differenceWith
此段代码按照给定函数逻辑筛选需要对比差异的数组,查找出前者数组在后者数组中不存在元素。
1 | const differenceWith = ( arr, val, comp ) => arr.filter( a => val.findIndex( b => comp( a, b ) ) === -1 ); |
29、digitize
将输入的数字拆分成单个数字组成的数组。
1 | const digitize = n => [ ...`${ n }` ].map( i => parseInt( i ) ); |
30、distance
计算两点之间的距离
1 | const distance = ( x0, y0, x1, y1 ) => Math.hypot( x1 - x0, y1 - y0 ); |
31、drop
此段代码将给定的数组从左边开始删除 n 个元素
1 | const drop = ( arr, n = 1 ) => arr.slice( n ); |
32、dropRight
此段代码将给定的数组从右边开始删除 n 个元素
1 | const dropRight = ( arr, n = 1 ) => arr.slice( 0, -n ); |
33、dropRightWhile
此段代码将给定的数组按照给定的函数条件从右开始删除,直到当前元素满足函数条件为True时,停止删除,并返回数组剩余元素。
1 | const dropRightWhile = ( arr, func ) => { |
34、dropWhile
按照给的的函数条件筛选数组,不满足函数条件的将从数组中移除。
1 | const dropWhile = ( arr, func ) => { |
35、elementContains
接收两个DOM元素对象参数,判断后者是否是前者的子元素。
1 | const elementContains = ( parent, child ) => parent !== child && parent.contains( child ); |
36、filterNonUnique
移除数组中重复的元素
1 | const filterNonUnique = arr => [ ...new Set( arr ) ]; |
37、findKey
按照给定的函数条件,查找第一个满足条件对象的键值。
1 | const findKey = ( obj, fn ) => Object.keys( obj ).find( key => fn( obj[ key ], key, obj ) ); |
38、findLast
按照给定的函数条件筛选数组,将最后一个满足条件的元素进行删除。
1 | const findLast = ( arr, fn ) => arr.filter( fn ).pop(); |
39、flatten
按照指定数组的深度,将嵌套数组进行展平。
1 | const flatten = ( arr, depth = 1 ) => |
40、forEachRight
按照给定的函数条件,从数组的右边往左依次进行执行。
1 | const forEachRight = ( arr, callback ) => |
41、forOwn
此段代码按照给定的函数条件,进行迭代对象。
1 | const forOwn = ( obj, fn ) => Object.keys( obj ).forEach( key => fn( obj[ key ], key, obj ) ); |
42、functionName
此段代码输出函数的名称。
1 | const functionName = fn => ( console.debug( fn.name ), fn ); |
43、getColonTimeFromDate
此段代码从Date对象里获取当前时间。
1 | const getColonTimeFromDate = date => date.toTimeString().slice( 0, 8 ); |
44、getDaysDiffBetweenDates
此段代码返回两个日期之间相差多少天
1 | const getDaysDiffBetweenDates = ( dateInitial, dateFinal ) => |
45、getStyle
此代码返回DOM元素节点对应的属性值。
1 | const getStyle = ( el, ruleName ) => getComputedStyle( el )[ ruleName ]; |
46、getType
此段代码的主要功能就是返回数据的类型。
1 | const getType = v => |
47、hasClass
此段代码返回DOM元素是否包含指定的Class样式。
1 | const hasClass = ( el, className ) => el.classList.contains( className ); |
48、head
此段代码输出数组的第一个元素。
1 | const head = arr => arr[ 0 ]; |
49、hide
此段代码隐藏指定的DOM元素。
1 | const hide = ( ...el ) => [ ...el ].forEach( e => ( e.style.display = 'none' ) ); |
50、httpsRedirect
此段代码的功能就是将http网址重定向https网址。
1 | const httpsRedirect = () => { |
51、indexOfAll
此代码可以返回数组中某个值对应的所有索引值,如果不包含该值,则返回一个空数组。
1 | const indexOfAll = ( arr, val ) => arr.reduce( ( acc, el, i ) => ( el === val ? [ ...acc, i ] : acc ), [] ); |
52、initial
此段代码返回数组中除最后一个元素的所有元素
1 | const initial = arr => arr.slice( 0, -1 ); |
53、insertAfter
此段代码的功能主要是在给定的DOM节点后插入新的节点内容
1 | const insertAfter = ( el, htmlString ) => el.insertAdjacentHTML( 'afterend', htmlString ); |
54、insertBefore
此段代码的功能主要是在给定的DOM节点前插入新的节点内容
1 | const insertBefore = ( el, htmlString ) => el.insertAdjacentHTML( 'beforebegin', htmlString ); |
55、intersection
此段代码返回两个数组元素之间的交集。
1 | const intersection = ( a, b ) => { |
56、intersectionBy
按照给定的函数处理需要对比的数组元素,然后根据处理后的数组,找出交集,最后从第一个数组中将对应的元素输出。
1 | const intersectionBy = ( a, b, fn ) => { |
57、intersectionBy
按照给定的函数对比两个数组的差异,然后找出交集,最后从第一个数组中将对应的元素输出。
1 | const intersectionWith = ( a, b, comp ) => a.filter( x => b.findIndex( y => comp( x, y ) ) !== -1 ); |
58、is
此段代码用于判断数据是否为指定的数据类型,如果是则返回true。
1 | const is = ( type, val ) => ![ , null ].includes( val ) && val.constructor === type; |
59、isAfterDate
接收两个日期类型的参数,判断前者的日期是否晚于后者的日期。
1 | const isAfterDate = ( dateA, dateB ) => dateA > dateB; |
60、isAnagram
用于检测两个单词是否相似。
1 | const isAnagram = ( str1, str2 ) => { |
61、isArrayLike
此段代码用于检测对象是否为类数组对象,是否可迭代。
1 | const isArrayLike = obj => obj != null && typeof obj[ Symbol.iterator ] === 'function'; |
62、isBeforeDate
接收两个日期类型的参数,判断前者的日期是否早于后者的日期。
1 | const isBeforeDate = ( dateA, dateB ) => dateA < dateB; |
63、isBoolean
此段代码用于检查参数是否为布尔类型。
1 | const isBoolean = val => typeof val === 'boolean'; |
64、getColonTimeFromDate
用于判断程序运行环境是否在浏览器,这有助于避免在node环境运行前端模块时出错。
1 | const isBrowser = () => ![ typeof window, typeof document ].includes( 'undefined' ); |
65、isBrowserTabFocused
用于判断当前页面是否处于活动状态(显示状态)。
1 | const isBrowserTabFocused = () => !document.hidden; |
66、isLowerCase
用于判断当前字符串是否都为小写。
1 | const isLowerCase = str => str === str.toLowerCase(); |
67、isNil
用于判断当前变量的值是否为 null 或 undefined 类型。
1 | const isNil = val => val === undefined || val === null; |
68、isNull
用于判断当前变量的值是否为 null 类型
1 | const isNull = val => val === null; |
69、isNumber
用于检查当前的值是否为数字类型
1 | function isNumber( n ) { |
70、isObject
用于判断参数的值是否是对象,这里运用了Object 构造函数创建一个对象包装器,如果是对象类型,将会原值返回。
1 | const isObject = obj => obj === Object( obj ); |
71、isObjectLike
用于检查参数的值是否为null以及类型是否为对象。
1 | const isObjectLike = val => val !== null && typeof val === 'object'; |
72、isPlainObject
此代码段检查参数的值是否是由Object构造函数创建的对象。
1 | const isPlainObject = val => !!val && typeof val === 'object' && val.constructor === Object; |
73、isPromiseLike
用于检查当前的对象是否类似Promise函数。
1 | const isPromiseLike = obj => |
74、isSameDate
用于判断给定的两个日期是否是同一天。
1 | const isSameDate = ( dateA, dateB ) => dateA.toISOString() === dateB.toISOString(); |
75、isString
用于检查当前的值是否为字符串类型。
1 | const isString = val => typeof val === 'string'; |
76、isSymbol
用于判断参数的值是否是 Symbol 类型。
1 | const isSymbol = val => typeof val === 'symbol'; |
77、isUndefined
用于判断参数的类型是否是 Undefined 类型。
1 | const isUndefined = val => val === undefined; |
78、isUpperCase
用于判断当前字符串的字母是否都为大写。
1 | const isUpperCase = str => str === str.toUpperCase(); |
79、isValidJSON
用于判断给定的字符串是否是 JSON 字符串。
1 | const isValidJSON = str => { |
80、last
此函数功能返回数组的最后一个元素。
1 | const last = arr => arr[ arr.length - 1 ]; |
81、matches
此函数功能用于比较两个对象,以确定第一个对象是否包含与第二个对象相同的属性值。
1 | const matches = ( obj, source ) => |
82、maxDate
此代码段查找日期数组中最大的日期进行输出。
1 | const maxDate = ( ...dates ) => new Date( Math.max.apply( null, ...dates ) ); |
83、maxN
此段代码输出数组中前 n 位最大的数。
1 | const maxN = ( arr, n = 1 ) => [ ...arr ].sort( ( a, b ) => b - a ).slice( 0, n ); |
84、minDate
此代码段查找日期数组中最早的日期进行输出。
1 | const minDate = ( ...dates ) => new Date( Math.min.apply( null, ...dates ) ); |
85、minN
此段代码输出数组中前 n 位最小的数。
1 | const minN = ( arr, n = 1 ) => [ ...arr ].sort( ( a, b ) => a - b ).slice( 0, n ); |
86、negate
此函数功能将不满足函数条件的内容筛选出来。
1 | const negate = func => ( ...args ) => !func( ...args ); |
87、 nodeListToArray
此函数返回给定的DOM节点,并以数组的形式输出。
1 | const nodeListToArray = nodeList => [ ...nodeList ]; |
88、pad
按照指定的长度生成字符串,如果字符串不够,可以按照设定的字符串内容在左右两边进行填充,默认空格为填充字符。
1 | const pad = ( str, length, char = ' ' ) => |
89、radsToDegrees
此函数功能将弧度转换成度数。
1 | const radsToDegrees = rad => ( rad * 180.0 ) / Math.PI; |
90、randomHexColorCode
此段代码用于生成随机的16进制颜色代码。
1 | const randomHexColorCode = () => { |
91、randomIntArrayInRange
按照指定的数字范围随机生成长度为 n 的数组。
1 | const randomIntArrayInRange = ( min, max, n = 1 ) => |
92、randomIntegerInRange
按照指定的范围内生成一个随机整数。
1 | const randomIntegerInRange = ( min, max ) => Math.floor( Math.random() * ( max - min + 1 ) ) + min; |
93、randomNumberInRange
该代码段可用于返回指定范围内的随机数(包含小数部分)。
1 | const randomNumberInRange = ( min, max ) => Math.random() * ( max - min ) + min; |
94、readFileLines
此段代码将读取到的文本内容,按行分割组成数组进行输出。
1 | const fs = require( 'fs' ); |
95、Redirect to a URL
此函数功能将页面导向一个指定的网站地址。
1 | const redirect = ( url, asLink = true ) => |
96、reverse
此段代码用于将一段字符串进行颠倒。
1 | const reverseString = str => [ ...str ].reverse().join( '' ); |
97、round
将小数按照指定的位数,进行四舍五入保留。
1 | const round = ( n, decimals = 0 ) => Number( `${ Math.round( `${ n }e${ decimals }` ) }e-${ decimals }` ); |
98、runPromisesInSeries
通过数组的形式,连续运行多个promise。
1 | const runPromisesInSeries = ps => ps.reduce( ( p, next ) => p.then( next ), Promise.resolve() ); |
99、sample
从数组中获取一个随机数。
1 | const sample = arr => arr[ Math.floor( Math.random() * arr.length ) ]; |
100、sampleSize
在数组中随机生选择 n 个元素生成新的数组,如果n大于数组长度,则为随机整个数组的排序。这里使用到了 Fisher–Yates shuffle 洗牌算法。
简单来说 Fisher–Yates shuffle 算法是一个用来将一个有限集合生成一个随机排列的算法(数组随机排序)。这个算法生成的随机排列是等概率的。同时这个算法非常高效。
更多关于 Fisher–Yates shuffle
洗牌算法的内容,你可以查看这里。
1 | const sampleSize = ( [ ...arr ], n = 1 ) => { |
101、 scrollToTop
此函数功能将页面平滑的滚动到页面的顶部。
1 | const scrollToTop = () => { |
102、serializeCookie
此段代码用于将 cookie 序列化成 name-value 的形式方便你存储在 Set-Cookie 头信息里。
1 | const serializeCookie = ( name, val ) => `${ encodeURIComponent( name ) }=${ encodeURIComponent( val ) }`; |
103、serializeCookie
此段代码用于在相应的DOM节点添加属性和值。
1 | const setStyle = ( el, ruleName, val ) => ( el.style[ ruleName ] = val ); |
104、 shallowClone
此段代码用于浅复制一个对象。
1 | const shallowClone = obj => Object.assign( {}, obj ); |
105、show
从段代码用于显示所有指定的 DOM 元素。
1 | const show = ( ...el ) => [ ...el ].forEach( e => ( e.style.display = '' ) ); |
106、shuffle
使用 Fisher–Yates shuffle 洗牌算法对数组的内容进行随机排序,生成新的数组。
什么是 Fisher–Yates shuffle 洗牌算法? 算法是一个用来将一个有限集合生成一个随机排列的算法(数组随机排序)。这个算法生成的随机排列是等概率的。同时这个算法非常高效。
更多关于 Fisher–Yates shuffle 洗牌算法的内容,你可以查看
https://gaohaoyang.github.io/2016/10/16/shuffle-algorithm/
1 | const shuffle = ( [ ...arr ] ) => { |
107、similarity
查找两个数组之间的交集。
1 | const similarity = ( arr, values ) => arr.filter( v => values.includes( v ) ); |
108、sleep
用于延迟异步函数的执行。
1 | const sleep = ms => new Promise( resolve => setTimeout( resolve, ms ) ); |
109、smoothScroll
此段代码用于让指定的DOM节点平滑滚动到可视区域。
1 | const smoothScroll = element => |
110、sortCharactersInString
此段代码将单词的内容按照字母的顺序进行重新排序。
1 | const sortCharactersInString = str => [ ...str ].sort( ( a, b ) => a.localeCompare( b ) ).join( '' ); |
111、splitLines
用于将一段字符串按照”换行符“分割成数组进行输出。
1 | const splitLines = str => str.split( /\r?\n/ ); |
112、tripHTMLTags
格式化去掉 HTML 代码内容,输出文本内容。
1 | const stripHTMLTags = str => str.replace( /<[^>]*>/g, '' ); |
113、sum
此段代码用于计算数字之和。
1 | const sum = ( ...arr ) => [ ...arr ].reduce( ( acc, val ) => acc + val, 0 ); |
114、tail
用于获取数组除第一个元素之外的所有元素,如果数组只有一个元素,则返回本数组。
1 | const tail = arr => ( arr.length > 1 ? arr.slice( 1 ) : arr ); |
115、take
从数组开始位置截取n个元素,生成新的数组。
1 | const take = ( arr, n = 1 ) => arr.slice( 0, n ); |
116、takeRight
从数组开始末尾截取n个元素,生成新的数组。
1 | const takeRight = ( arr, n = 1 ) => arr.slice( arr.length - n, arr.length ); |
117、timeTaken
用来计算函数执行的时间。
1 | const timeTaken = callback => { |
118、times
按照指定的次数,进行回调函数。
1 | const times = ( n, fn, context = undefined ) => { |
119、toCurrency
此段代码用于按照指定的货币类型格式化货币数字。
1 | const toCurrency = ( n, curr, LanguageFormat = undefined ) => |
120、toDecimalMark
用于格式化数字,将其转换成逗号分隔的数字字符串。
1 | const toDecimalMark = num => num.toLocaleString( 'en-US' ); |
121、toggleClass
使用 element.classList.toggle() 来切换元素中指定样式类。
1 | const toggleClass = ( el, className ) => el.classList.toggle( className ); |
122、tomorrow
用于获取明天的日期。
1 | const tomorrow = () => { |
123、unfold
基于初始值,和步长生成一个新的数组。
1 | const unfold = ( fn, seed ) => { |
124、union
合并两个数组,并删除重复的内容。
1 | const union = ( a, b ) => Array.from( new Set( [ ...a, ...b ] ) ); |
125、uniqueElements
使用 ES6 的 set 和 …rest 运算去除数组中重复的元素。
1 | const uniqueElements = arr => [ ...new Set( arr ) ]; |
126、validateNumber
用于检查参数类型是否是数字。
1 | const validateNumber = n => !isNaN( parseFloat( n ) ) && isFinite( n ) && Number( n ) == n; |
127、words
将一段英文字符串拆分成单词数组(去除一些特殊符号)。
1 | const words = ( str, pattern = /[^a-zA-Z-]+/ ) => str.split( pattern ).filter( Boolean ); |
- 本文标题:127个常用的JS代码片段
- 本文作者:Jacshuo
- 创建时间:2022-06-25 21:49:57
- 本文链接:https://blog.imade.life/2022/06/25/127/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!