You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
onstattempt=(fn, ...args)=>{try{returnfn(...args);}catch(e){returneinstanceofError ? e : newError(e);}};varelements=attempt(function(selector){returndocument.querySelectorAll(selector);},'>_>');if(elementsinstanceofError)elements=[];// elements = []
2. defer:推迟执行
此代码段延迟了函数的执行,直到清除了当前调用堆栈。
constdefer=(fn, ...args)=>setTimeout(fn,1, ...args)defer(console.log,'a'),console.log('b')// logs 'b' then 'a'
/** * Create a cached version of a pure function. */
export functioncached<F: Function>(fn: F): F{constcache=Object.create(null)return(functioncachedFn(str: string){consthit=cache[str]returnhit||(cache[str]=fn(str))}: any)}
前言
目录
1. 第一部分:数组
1.
all
:布尔全等判断2.
allEqual
:检查数组各项相等3.
approximatelyEqual
:约等于4.
arrayToCSV
:数组转CSV
格式(带空格的字符串)5.
arrayToHtmlList
:数组转li
列表此代码段将数组的元素转换为
<li>
标签,并将其附加到给定 ID 的列表中。6.
average
:平均数7.
averageBy
:数组对象属性平均数此代码段将获取数组对象属性的平均值
8.
bifurcate
:拆分断言后的数组可以根据每个元素返回的值,使用
reduce()
和push()
将元素添加到第二次参数fn
中 。9.
castArray
:其它类型转数组10.
compact
:去除数组中的无效/无用值11.
countOccurrences
:检测数值出现次数12.
deepFlatten
:递归扁平化数组13.
difference
:寻找差异此代码段查找两个数组之间的差异。
14.
differenceBy
:先执行再寻找差异在将给定函数应用于两个列表的每个元素之后,此方法返回两个数组之间的差异。
15.
dropWhile
:删除不符合条件的值此代码段从数组顶部开始删除元素,直到传递的函数返回为
true
。16.
flatten
:指定深度扁平化数组此代码段第二参数可指定深度。
17.
indexOfAll
:返回数组中某值的所有索引此代码段可用于获取数组中某个值的所有索引,如果此值中未包含该值,则返回一个空数组。
18.
intersection
:两数组的交集19.
intersectionWith
:两数组都符合条件的交集此片段可用于在对两个数组的每个元素执行了函数之后,返回两个数组中存在的元素列表。
20.
intersectionWith
:先比较后返回交集21.
minN
:返回指定长度的升序数组22.
negate
:根据条件反向筛选23.
randomIntArrayInRange
:生成两数之间指定长度的随机数组24.
sample
:在指定数组中获取随机数25.
sampleSize
:在指定数组中获取指定长度的随机数此代码段可用于从数组中获取指定长度的随机数,直至穷尽数组。
使用
Fisher-Yates
算法对数组中的元素进行随机选择。26.
shuffle
:“洗牌” 数组此代码段使用
Fisher-Yates
算法随机排序数组的元素。27.
nest
:根据parent_id
生成树结构(阿里一面真题)根据每项的
parent_id
,生成具体树形结构的对象。用法:
强烈建议去理解这个的实现,因为这是我亲身遇到的阿里一面真题:
2. 第二部分:函数
1.
attempt
:捕获函数运行异常该代码段执行一个函数,返回结果或捕获的错误对象。
2.
defer
:推迟执行此代码段延迟了函数的执行,直到清除了当前调用堆栈。
3.
runPromisesInSeries
:运行多个Promises
4.
timeTaken
:计算函数执行时间5.
createEventHub
:简单的发布/订阅模式创建一个发布/订阅(发布-订阅)事件集线,有
emit
,on
和off
方法。Object.create(null)
创建一个空的hub
对象。emit
,根据event
参数解析处理程序数组,然后.forEach()
通过传入数据作为参数来运行每个处理程序。on
,为事件创建一个数组(若不存在则为空数组),然后.push()
将处理程序添加到该数组。off
,用.findIndex()
在事件数组中查找处理程序的索引,并使用.splice()
删除。用法:
6.
memoize
:缓存函数通过实例化一个
Map
对象来创建一个空的缓存。通过检查输入值的函数输出是否已缓存,返回存储一个参数的函数,该参数将被提供给已记忆的函数;如果没有,则存储并返回它。
Ps: 这个版本可能不是很清晰,还有 Vue 源码版的:
7.
once
:只调用一次的函数8.
flattenObject
:以键的路径扁平化对象使用递归。
Object.keys(obj)
联合Array.prototype.reduce()
,以每片叶子节点转换为扁平的路径节点。prefix
以创建路径Object.assign()
。prefix
除非您希望每个键都有一个前缀,否则应始终省略第二个参数。9.
unflattenObject
:以键的路径展开对象与上面的相反,展开对象。
这个的用途,在做
Tree
组件或复杂表单时取值非常舒服。3. 第三部分:字符串
1.
byteSize
:返回字符串的字节长度2.
capitalize
:首字母大写3.
capitalizeEveryWord
:每个单词首字母大写4.
decapitalize
:首字母小写5.
luhnCheck
:银行卡号码校验(luhn
算法)Luhn
算法的实现,用于验证各种标识号,例如信用卡号,IMEI 号,国家提供商标识号等。与
String.prototype.split('')
结合使用,以获取数字数组。获得最后一个数字。实施luhn
算法。如果被整除,则返回,否则返回。用例:
补充:银行卡号码的校验规则:
关于
luhn
算法,可以参考以下文章:银行卡号码的校验采用
Luhn
算法,校验过程大致如下:从右到左给卡号字符串编号,最右边第一位是 1,最右边第二位是 2,最右边第三位是 3….
从右向左遍历,对每一位字符 t 执行第三个步骤,并将每一位的计算结果相加得到一个数 s。
对每一位的计算规则:如果这一位是奇数位,则返回 t 本身,如果是偶数位,则先将 t 乘以 2 得到一个数 n,如果 n 是一位数(小于 10),直接返回 n,否则将 n 的个位数和十位数相加返回。
如果 s 能够整除 10,则此号码有效,否则号码无效。
因为最终的结果会对 10 取余来判断是否能够整除 10,所以又叫做模 10 算法。
当然,还是库比较香: bankcardinfo
6.
splitLines
:将多行字符串拆分为行数组。使用
String.prototype.split()
和正则表达式匹配换行符并创建一个数组。7.
stripHTMLTags
:删除字符串中的HTMl
标签从字符串中删除
HTML / XML
标签。使用正则表达式从字符串中删除
HTML / XML
标记。4. 第四部分:对象
1.
dayOfYear
:当前日期天数2.
forOwn
:迭代属性并执行回调3.
Get Time From Date
:返回当前 24 小时制时间的字符串4.
Get Days Between Dates
:返回日期间的天数5.
is
:检查值是否为特定类型。6.
isAfterDate
:检查是否在某日期后7.
isBeforeDate
:检查是否在某日期前8
tomorrow
:获取明天的字符串格式时间9.
equals
:全等判断在两个变量之间进行深度比较以确定它们是否全等。
此代码段精简的核心在于
Array.prototype.every()
的使用。用法:
5. 第五部分:数字
1.
randomIntegerInRange
:生成指定范围的随机整数2.
randomNumberInRange
:生成指定范围的随机小数3.
round
:四舍五入到指定位数4.
sum
:计算数组或多个数字的总和5.
toCurrency
:简单的货币单位转换6. 第六部分:浏览器操作及其它
1.
bottomVisible
:检查页面底部是否可见2.
Create Directory
:检查创建目录此代码段调用
fs
模块的existsSync()
检查目录是否存在,如果不存在,则mkdirSync()
创建该目录。3.
currentURL
:返回当前链接url
4.
distance
:返回两点间的距离该代码段通过计算欧几里得距离来返回两点之间的距离。
5.
elementContains
:检查是否包含子元素此代码段检查父元素是否包含子元素。
6.
getStyle
:返回指定元素的生效样式7.
getType
:返回值或变量的类型名8.
hasClass
:校验指定元素的类名9.
hide
:隐藏所有的指定标签10.
httpsRedirect
:HTTP
跳转HTTPS
11.
insertAfter
:在指定元素之后插入新元素12.
insertBefore
:在指定元素之前插入新元素13.
isBrowser
:检查是否为浏览器环境此代码段可用于确定当前运行时环境是否为浏览器。这有助于避免在服务器(节点)上运行前端模块时出错。
14.
isBrowserTab
:检查当前标签页是否活动15.
nodeListToArray
:转换nodeList
为数组16.
Random Hexadecimal Color Code
:随机十六进制颜色17.
scrollToTop
:平滑滚动至顶部该代码段可用于平滑滚动到当前页面的顶部。
18.
smoothScroll
:滚动到指定元素区域该代码段可将指定元素平滑滚动到浏览器窗口的可见区域。
19.
detectDeviceType
:检测移动/PC 设备20.
getScrollPosition
:返回当前的滚动位置默认参数为
window
,pageXOffset(pageYOffset)
为第一选择,没有则用scrollLeft(scrollTop)
21.
size
:获取不同类型变量的长度这个的实现非常巧妙,利用
Blob
类文件对象的特性,获取对象的长度。另外,多重三元运算符,是真香。
22.
escapeHTML
:转义HTML
当然是用来防
XSS
攻击啦。参考资料
The text was updated successfully, but these errors were encountered: