cainiaoblog 23.2.347 → 23.2.349
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{app/manual.html → manual.html} +1 -1
- package/package.json +1 -1
- package/CNAME +0 -1
- package/MP_verify_o6dHCK5mIkxNpzvZ.txt +0 -1
- package/README.md +0 -8
- package/about/index.html +0 -55
- package/ads.txt +0 -1
- package/archives/2018/index.html +0 -48
- package/archives/2019/index.html +0 -48
- package/archives/2019/page/2/index.html +0 -48
- package/archives/2020/index.html +0 -48
- package/archives/2021/index.html +0 -48
- package/archives/2022/index.html +0 -48
- package/archives/2023/index.html +0 -48
- package/archives/index.html +0 -48
- package/archives/page/2/index.html +0 -48
- package/archives/page/3/index.html +0 -48
- package/article/10047.html +0 -148
- package/article/10164.html +0 -65
- package/article/10624.html +0 -436
- package/article/10745.html +0 -586
- package/article/11674.html +0 -71
- package/article/11939.html +0 -72
- package/article/12238.html +0 -86
- package/article/1230.html +0 -533
- package/article/13265.html +0 -69
- package/article/13823.html +0 -78
- package/article/14125.html +0 -72
- package/article/14192.html +0 -561
- package/article/14375.html +0 -85
- package/article/14744.html +0 -83
- package/article/14936.html +0 -451
- package/article/1518.html +0 -250
- package/article/15428.html +0 -71
- package/article/15518.html +0 -288
- package/article/15569.html +0 -418
- package/article/1566.html +0 -122
- package/article/16017.html +0 -156
- package/article/16947.html +0 -440
- package/article/17096.html +0 -82
- package/article/17246.html +0 -89
- package/article/17575.html +0 -350
- package/article/179.html +0 -757
- package/article/18039.html +0 -233
- package/article/18071.html +0 -375
- package/article/18142.html +0 -71
- package/article/19909.html +0 -160
- package/article/20014.html +0 -89
- package/article/20021.html +0 -389
- package/article/20037.html +0 -280
- package/article/20056.html +0 -95
- package/article/20093.html +0 -404
- package/article/2021.html +0 -607
- package/article/20459.html +0 -115
- package/article/20613.html +0 -263
- package/article/20635.html +0 -71
- package/article/21317.html +0 -71
- package/article/21320.html +0 -90
- package/article/21782.html +0 -548
- package/article/22230.html +0 -435
- package/article/22237.html +0 -347
- package/article/22398.html +0 -109
- package/article/22422.html +0 -270
- package/article/22565.html +0 -300
- package/article/23046.html +0 -250
- package/article/23083.html +0 -215
- package/article/23195.html +0 -297
- package/article/23301.html +0 -835
- package/article/23589.html +0 -285
- package/article/23655.html +0 -338
- package/article/23864.html +0 -76
- package/article/23914.html +0 -96
- package/article/24169.html +0 -135
- package/article/24581.html +0 -349
- package/article/2475.html +0 -500
- package/article/24826.html +0 -77
- package/article/24924.html +0 -247
- package/article/25164.html +0 -1495
- package/article/25318.html +0 -394
- package/article/25710.html +0 -1129
- package/article/25734.html +0 -83
- package/article/26083.html +0 -174
- package/article/26147.html +0 -283
- package/article/26291.html +0 -110
- package/article/26354.html +0 -71
- package/article/26624.html +0 -145
- package/article/26639.html +0 -298
- package/article/26850.html +0 -138
- package/article/26940.html +0 -258
- package/article/27796.html +0 -190
- package/article/27800.html +0 -161
- package/article/28963.html +0 -159
- package/article/28976.html +0 -247
- package/article/29042.html +0 -72
- package/article/29596.html +0 -81
- package/article/29619.html +0 -183
- package/article/29623.html +0 -329
- package/article/29829.html +0 -205
- package/article/29abbd1c.html +0 -112
- package/article/30215.html +0 -178
- package/article/30552.html +0 -78
- package/article/30818.html +0 -201
- package/article/31330.html +0 -364
- package/article/3154.html +0 -577
- package/article/31695.html +0 -348
- package/article/31826.html +0 -71
- package/article/31843.html +0 -132
- package/article/32280.html +0 -212
- package/article/32431.html +0 -74
- package/article/32443.html +0 -72
- package/article/32732.html +0 -122
- package/article/3286.html +0 -251
- package/article/32960.html +0 -198
- package/article/33713.html +0 -72
- package/article/33899.html +0 -615
- package/article/34351.html +0 -74
- package/article/34372.html +0 -89
- package/article/34410.html +0 -74
- package/article/34431.html +0 -118
- package/article/3447.html +0 -75
- package/article/34474.html +0 -142
- package/article/34871.html +0 -147
- package/article/35397.html +0 -175
- package/article/3544.html +0 -199
- package/article/35503.html +0 -115
- package/article/35624.html +0 -84
- package/article/35697.html +0 -384
- package/article/35863.html +0 -73
- package/article/36037.html +0 -253
- package/article/36118.html +0 -71
- package/article/3621.html +0 -119
- package/article/36251.html +0 -296
- package/article/36642.html +0 -352
- package/article/37102.html +0 -763
- package/article/37336.html +0 -351
- package/article/37351.html +0 -89
- package/article/3760.html +0 -294
- package/article/37749.html +0 -75
- package/article/37789.html +0 -83
- package/article/38005.html +0 -765
- package/article/38009.html +0 -284
- package/article/38269.html +0 -194
- package/article/38344.html +0 -88
- package/article/38359.html +0 -334
- package/article/38423.html +0 -379
- package/article/38530.html +0 -213
- package/article/38743.html +0 -268
- package/article/38753.html +0 -204
- package/article/38881.html +0 -71
- package/article/39087.html +0 -414
- package/article/39309.html +0 -84
- package/article/39486.html +0 -73
- package/article/39637.html +0 -306
- package/article/39839.html +0 -72
- package/article/39937.html +0 -152
- package/article/39970.html +0 -71
- package/article/402.html +0 -559
- package/article/40698.html +0 -71
- package/article/40811.html +0 -71
- package/article/40964.html +0 -462
- package/article/41011.html +0 -322
- package/article/41152.html +0 -78
- package/article/41696.html +0 -71
- package/article/41717.html +0 -281
- package/article/41777.html +0 -149
- package/article/419.html +0 -985
- package/article/4233.html +0 -136
- package/article/4292.html +0 -86
- package/article/43302.html +0 -96
- package/article/43397.html +0 -106
- package/article/43724.html +0 -281
- package/article/43999.html +0 -224
- package/article/44426.html +0 -77
- package/article/44964.html +0 -137
- package/article/45004.html +0 -123
- package/article/4510.html +0 -83
- package/article/45156.html +0 -320
- package/article/45157.html +0 -52
- package/article/45267.html +0 -87
- package/article/45641.html +0 -207
- package/article/45960.html +0 -75
- package/article/46100.html +0 -1262
- package/article/46366.html +0 -74
- package/article/46771.html +0 -96
- package/article/46911.html +0 -517
- package/article/46948.html +0 -137
- package/article/46ee4850.html +0 -349
- package/article/47019.html +0 -84
- package/article/47532.html +0 -94
- package/article/4783.html +0 -429
- package/article/47972.html +0 -72
- package/article/48216.html +0 -127
- package/article/48252.html +0 -185
- package/article/48520.html +0 -74
- package/article/48722.html +0 -75
- package/article/48807.html +0 -99
- package/article/49126.html +0 -323
- package/article/50001.html +0 -88
- package/article/50058.html +0 -151
- package/article/50343.html +0 -410
- package/article/50510.html +0 -82
- package/article/51082.html +0 -98
- package/article/51677.html +0 -111
- package/article/5204.html +0 -1085
- package/article/52500.html +0 -538
- package/article/52689.html +0 -259
- package/article/52877.html +0 -569
- package/article/53125.html +0 -191
- package/article/53428.html +0 -251
- package/article/53524.html +0 -74
- package/article/53698.html +0 -322
- package/article/53803e6.html +0 -93
- package/article/53924.html +0 -291
- package/article/53962.html +0 -253
- package/article/54006.html +0 -71
- package/article/54018.html +0 -88
- package/article/54161.html +0 -83
- package/article/54178.html +0 -69
- package/article/54258.html +0 -327
- package/article/54295.html +0 -214
- package/article/54313.html +0 -1976
- package/article/54351.html +0 -90
- package/article/54604.html +0 -80
- package/article/54632.html +0 -71
- package/article/54912.html +0 -756
- package/article/54918.html +0 -129
- package/article/55119.html +0 -136
- package/article/55756.html +0 -118
- package/article/55769.html +0 -136
- package/article/55870.html +0 -161
- package/article/56139.html +0 -92
- package/article/56557.html +0 -69
- package/article/56604.html +0 -69
- package/article/56816.html +0 -266
- package/article/56926.html +0 -153
- package/article/57747.html +0 -409
- package/article/57965.html +0 -475
- package/article/58816.html +0 -78
- package/article/59059.html +0 -435
- package/article/59095.html +0 -350
- package/article/59349.html +0 -244
- package/article/59402.html +0 -216
- package/article/59448.html +0 -55
- package/article/59870.html +0 -94
- package/article/59877.html +0 -208
- package/article/5dbb6f41.html +0 -86
- package/article/6008.html +0 -75
- package/article/60327.html +0 -126
- package/article/6035.html +0 -76
- package/article/60428.html +0 -71
- package/article/60544.html +0 -128
- package/article/61319.html +0 -95
- package/article/61367.html +0 -93
- package/article/624d1918.html +0 -292
- package/article/62543.html +0 -71
- package/article/62887.html +0 -169
- package/article/63074.html +0 -120
- package/article/63266.html +0 -311
- package/article/63351.html +0 -74
- package/article/63542.html +0 -104
- package/article/63824.html +0 -275
- package/article/64051.html +0 -653
- package/article/64189b69.html +0 -72
- package/article/64354.html +0 -75
- package/article/64869.html +0 -79
- package/article/64923.html +0 -596
- package/article/65128.html +0 -95
- package/article/65295.html +0 -79
- package/article/6888.html +0 -75
- package/article/7065.html +0 -84
- package/article/7455.html +0 -85
- package/article/7a3ef8f.html +0 -315
- package/article/8140.html +0 -188
- package/article/8190.html +0 -85
- package/article/8225.html +0 -78
- package/article/84c9ccd6.html +0 -159
- package/article/8f9a9ae3.html +0 -82
- package/article/9174.html +0 -73
- package/article/9738.html +0 -294
- package/article/9c3c56c.html +0 -682
- package/article/a4145266.html +0 -71
- package/article/bedea419.html +0 -72
- package/article/bf7e7421.html +0 -78
- package/article/c1867fbf.html +0 -103
- package/article/dcb0db28.html +0 -76
- package/article/fc3b727a.html +0 -79
- package/atom.xml +0 -441
- package/baidusitemap.xml +0 -1079
- package/blocks/dns.txt +0 -291
- package/blocks/filter.txt +0 -1068
- package/blocks/script.js +0 -42
- package/categories/CDN/index.html +0 -48
- package/categories/IDE/index.html +0 -48
- package/categories/git/index.html +0 -48
- package/categories/hexo/index.html +0 -48
- package/categories//345/205/254/345/205/261/350/212/202/346/227/245/index.html +0 -48
- package/categories//345/210/206/344/272/253/index.html +0 -48
- package/categories//345/211/215/347/253/257/index.html +0 -48
- package/categories//345/211/215/347/253/257/page/2/index.html +0 -48
- package/categories//345/211/215/347/253/257//346/265/217/350/247/210/345/231/250/index.html +0 -48
- package/categories//345/211/215/347/253/257//346/265/217/350/247/210/345/231/250//347/275/221/347/273/234/345/215/217/350/256/256/index.html +0 -48
- package/categories//345/215/232/345/256/242/index.html +0 -48
- package/categories//345/267/245/345/205/267/index.html +0 -48
- package/categories//345/271/277/345/221/212/350/277/207/346/273/244/index.html +0 -48
- package/categories//345/271/277/345/221/212/350/277/207/346/273/244//345/275/261/350/247/206/347/224/265/350/247/206/345/260/217/350/257/264/346/274/253/347/224/273/350/265/204/350/256/257/351/237/263/344/271/220/index.html +0 -48
- package/categories//345/271/277/345/221/212/350/277/207/346/273/244//350/247/206/351/242/221/347/224/265/350/247/206/345/260/217/350/257/264/346/274/253/347/224/273/350/265/204/350/256/257/351/237/263/344/271/220/index.html +0 -48
- package/categories//346/255/243/345/210/231/index.html +0 -48
- package/categories//346/265/217/350/247/210/345/231/250/index.html +0 -48
- package/categories//347/256/227/346/263/225/index.html +0 -48
- package/categories//350/265/204/350/256/257/index.html +0 -48
- package/categories//350/275/273/346/235/276/344/270/200/345/210/273/index.html +0 -48
- package/cdn/css/font-awesome.min.css +0 -4
- package/cdn/css/grids-responsive-min.css +0 -7
- package/cdn/css/normalize.css +0 -349
- package/cdn/css/pure-min.css +0 -11
- package/cdn/fonts/fontawesome-webfont.eot +0 -0
- package/cdn/fonts/fontawesome-webfont.svg +0 -2671
- package/cdn/fonts/fontawesome-webfont.ttf +0 -0
- package/cdn/fonts/fontawesome-webfont.woff +0 -0
- package/cdn/fonts/fontawesome-webfont.woff2 +0 -0
- package/cdn/js/Valine.min.js +0 -17
- package/cdn/js/canvas-nest.js +0 -1
- package/cdn/js/clipboard.min.js +0 -7
- package/cdn/js/crypto-js.js +0 -25
- package/cdn/js/jquery.min.js +0 -2
- package/css/default.css +0 -1144
- package/css/donate.css +0 -338
- package/css/hbe.style.css +0 -749
- package/css/style.css +0 -2095
- package/donate/index.html +0 -40
- package/google917dcf72f6e5c7f5.html +0 -1
- package/guestbook/index.html +0 -68
- package/hosts/ads.txt +0 -149
- package/hosts/flash.txt +0 -9
- package/hosts/github.txt +0 -15
- package/hosts/google.txt +0 -16936
- package/hosts/winrar.txt +0 -2
- package/img/alipay.svg +0 -46
- package/img/bitcoin.svg +0 -135
- package/img/blog.ico +0 -0
- package/img/blog.png +0 -0
- package/img/gaba.png +0 -0
- package/img/github.svg +0 -1
- package/img/like.svg +0 -1
- package/img/mp-mini.jpg +0 -0
- package/img/mp.png +0 -0
- package/img/paypal.svg +0 -63
- package/img/upy_logo.svg +0 -59
- package/img/wechat.svg +0 -49
- package/index.html +0 -48
- package/jd_root.txt +0 -1
- package/js/codeblock-resizer.js +0 -51
- package/js/dark.js +0 -12
- package/js/donate.js +0 -87
- package/js/fixedPage.js +0 -110
- package/js/gitment.browser.js +0 -3751
- package/js/search.js +0 -86
- package/js/share.js +0 -60
- package/js/smartresize.js +0 -32
- package/js/totop.js +0 -12
- package/kankan/index.html +0 -1323
- package/lib/hbe.js +0 -297
- package/page/10/index.html +0 -49
- package/page/11/index.html +0 -59
- package/page/12/index.html +0 -67
- package/page/13/index.html +0 -63
- package/page/14/index.html +0 -66
- package/page/15/index.html +0 -60
- package/page/16/index.html +0 -60
- package/page/17/index.html +0 -62
- package/page/18/index.html +0 -61
- package/page/19/index.html +0 -58
- package/page/2/index.html +0 -48
- package/page/20/index.html +0 -57
- package/page/21/index.html +0 -61
- package/page/22/index.html +0 -55
- package/page/23/index.html +0 -64
- package/page/24/index.html +0 -60
- package/page/25/index.html +0 -58
- package/page/26/index.html +0 -48
- package/page/27/index.html +0 -58
- package/page/3/index.html +0 -48
- package/page/4/index.html +0 -48
- package/page/5/index.html +0 -51
- package/page/6/index.html +0 -51
- package/page/7/index.html +0 -51
- package/page/8/index.html +0 -53
- package/page/9/index.html +0 -48
- package/randomcall/README.html +0 -1
- package/randomcall/lucker.html +0 -290
- package/randomcall/lucky.png +0 -0
- package/robots.txt +0 -22
- package/search.xml +0 -6728
- package/sitemap.xml +0 -2694
- package/tags//345/216/237/345/210/233/index.html +0 -48
- package/tags//345/250/261/344/271/220/index.html +0 -48
- package/tags//346/211/213/345/206/231/index.html +0 -48
- package/tags//347/226/253/346/203/205/index.html +0 -48
- package/tags//350/275/254/350/275/275/index.html +0 -48
- package/tags//350/275/254/350/275/275/page/2/index.html +0 -48
- package/v.html +0 -22
- /package/{appConfigs/config → config} +0 -0
- /package/{extConfigs/extension.json → extension.json} +0 -0
package/article/23301.html
DELETED
|
@@ -1,835 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="zh-CN" data-dark><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"><meta content="yes" name="apple-mobile-web-app-capable"><meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"><meta content="telephone=no" name="format-detection"><meta name="description" content="前端壹菜鸟,记录工作难题,关注前端知识,收集精彩博文,做技术的搬运工"><meta name="msvalidate.01" content="0FE4D8B3381D3D87088996B886E1E2BD"><title>30 seconds of code 30秒就能理解的JavaScript优秀代码 | 前端壹菜鸟</title><link rel="stylesheet" type="text/css" href="//unpkg.com/cainiaoblog@latest/css/style.css"><link rel="stylesheet" type="text/css" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/css/style.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/cainiaoblog@latest/css/style.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/normalize.css@latest/normalize.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss@latest/build/pure-min.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss@latest/build/grids-responsive-min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css"><link rel="icon" mask="" sizes="any" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.ico"><link rel="Shortcut Icon" type="image/x-icon" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.ico"><link rel="apple-touch-icon" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.png"><link rel="apple-touch-icon-precomposed" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.png"><link rel="alternate" type="application/atom+xml" href="/atom.xml"><script type="text/javascript" src="//cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js"></script><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8385136408348258"></script><script src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" async></script><script>(function(){
|
|
2
|
-
var bp = document.createElement('script');
|
|
3
|
-
var curProtocol = window.location.protocol.split(':')[0];
|
|
4
|
-
if (curProtocol === 'https'){
|
|
5
|
-
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
|
|
6
|
-
}
|
|
7
|
-
else{
|
|
8
|
-
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
|
|
9
|
-
}
|
|
10
|
-
var s = document.getElementsByTagName("script")[0];
|
|
11
|
-
s.parentNode.insertBefore(bp, s);
|
|
12
|
-
})();
|
|
13
|
-
</script><script>(function(){
|
|
14
|
-
var src = 'https://jspassport.ssl.qhimg.com/11.0.1.js?d182b3f28525f2db83acfaaf6e696dba';
|
|
15
|
-
document.write('<script src="' + src + '" id="sozz"><\/script>');
|
|
16
|
-
})();
|
|
17
|
-
</script><script>var _hmt=_hmt||[];(function(){var hm=document.createElement("script");hm.src='https://hm.baidu.com/hm.js?011f0b44e8452bfa57fbfa23c5fe7683';var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(hm, s);})();
|
|
18
|
-
</script><script async src="https://www.googletagmanager.com/gtag/js?id=UA-150860401-1"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);};gtag('js',new Date());gtag('config','UA-150860401-1');
|
|
19
|
-
</script><script type="text/javascript" src="//cdn.jsdelivr.net/npm/cainiaoblog@latest/js/fixedPage.min.js"></script><meta name="generator" content="Hexo 6.3.0"></head><body><div class="body_container"><div id="header"><div class="site-name"><a id="logo" href="/.">前端壹菜鸟</a><p class="description">关注前端知识,收集精彩博文,做技术的搬运工</p></div><div id="nav-menu"><a class="current" href="/." target="_self"><i class="fa fa-home"> 首页</i></a><a href="/archives/" target="_self"><i class="fa fa-archive"> 归档</i></a><a href="/guestbook/" target="_self"><i class="fa fa-comments"> 留言</i></a><a href="/about/" target="_self"><i class="fa fa-user"> 关于</i></a><a href="https://laonongmin.online/" target="_target"><i class="fa fa-group"> 看看</i></a><a href="https://love.xuehuayu.cn/" target="_target"><i class="fa fa-heart"> LOVE</i></a></div></div><div class="pure-g" id="layout"><div class="pure-u-1 pure-u-md-3-4"><div class="content_container"><div class="post"><h1 class="post-title c-post">30 seconds of code 30秒就能理解的JavaScript优秀代码</h1><div class="post-meta"><span class="date">2019-09-29</span><span> | </span><span class="tag"><a href="/tags/%E8%BD%AC%E8%BD%BD/">转载 </a></span><span> | </span><span class="category"><a href="/categories/%E5%89%8D%E7%AB%AF/">前端 </a></span><span id="busuanzi_container_page_pv"> | <span id="busuanzi_value_page_pv"><i class="fa fa-spinner"></i></span><span> 阅读</span></span><span class="post-time"><span class="post-meta-item-text"> | </span><span class="post-meta-item-icon"><i class="fa fa-keyboard-o"></i><span class="post-count"> 8.9k</span><span class="post-meta-item-text"> 字</span></span></span><span class="post-time"> | <span class="post-meta-item-icon"><i class="fa fa-hourglass-half"></i><span class="post-count"> 42</span><span class="post-meta-item-text"> 分钟</span></span></span></div><a class="disqus-comment-count" href="/article/23301.html#vcomment"><span class="waline-comment-count" data-path="/article/23301.html"></span><span> 条评论</span></a><div class="post-content"><p>30 seconds of code 30秒就能理解的JavaScript优秀代码</p>
|
|
20
|
-
<span id="more"></span>
|
|
21
|
-
<blockquote>
|
|
22
|
-
<h2 id="数组"><a href="#数组" class="headerlink" title="数组"></a>数组</h2></blockquote>
|
|
23
|
-
<ul>
|
|
24
|
-
<li><p>arrayMax</p>
|
|
25
|
-
<p>返回数组中的最大值。</p>
|
|
26
|
-
<p>将Math.max()与扩展运算符 (…) 结合使用以获取数组中的最大值。</p>
|
|
27
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">arrayMax</span> = arr => <span class="title class_">Math</span>.<span class="title function_">max</span>(...arr);</span><br><span class="line"><span class="comment">// arrayMax([10, 1, 5]) -> 10</span></span><br></pre></td></tr></table></figure></li>
|
|
28
|
-
</ul>
|
|
29
|
-
<hr>
|
|
30
|
-
<ul>
|
|
31
|
-
<li><p>arrayMin</p>
|
|
32
|
-
<p>返回数组中的最小值。</p>
|
|
33
|
-
<p>将Math.min()与扩展运算符 (…) 结合使用以获取数组中的最小值。</p>
|
|
34
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">arrayMin</span> = arr => <span class="title class_">Math</span>.<span class="title function_">min</span>(...arr);</span><br><span class="line"><span class="comment">// arrayMin([10, 1, 5]) -> 1</span></span><br></pre></td></tr></table></figure></li>
|
|
35
|
-
</ul>
|
|
36
|
-
<hr>
|
|
37
|
-
<ul>
|
|
38
|
-
<li><p>chunk</p>
|
|
39
|
-
<p>将数组块划分为指定大小的较小数组。</p>
|
|
40
|
-
<p>使用Array.from()创建新的数组, 这符合将生成的区块数。使用Array.slice()将新数组的每个元素映射到size长度的区块。如果原始数组不能均匀拆分, 则最终的块将包含剩余的元素。</p>
|
|
41
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">chunk</span> = (<span class="params">arr, size</span>) =></span><br><span class="line"><span class="title class_">Array</span>.<span class="title function_">from</span>({<span class="attr">length</span>: <span class="title class_">Math</span>.<span class="title function_">ceil</span>(arr.<span class="property">length</span> / size)}, <span class="function">(<span class="params">v, i</span>) =></span> arr.<span class="title function_">slice</span>(i * size, i * size + size));</span><br><span class="line"><span class="comment">// chunk([1,2,3,4,5], 2) -> [[1,2],[3,4],[5]]</span></span><br></pre></td></tr></table></figure></li>
|
|
42
|
-
</ul>
|
|
43
|
-
<hr>
|
|
44
|
-
<ul>
|
|
45
|
-
<li><p>compact</p>
|
|
46
|
-
<p>从数组中移除 falsey 值。</p>
|
|
47
|
-
<p>使用Array.filter()筛选出 falsey 值 (false、null、 0、 “”、undefined和NaN).</p>
|
|
48
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">compact</span> = (<span class="params">arr</span>) => arr.<span class="title function_">filter</span>(<span class="title class_">Boolean</span>);</span><br><span class="line"><span class="comment">// compact([0, 1, false, 2, '', 3, 'a', 'e'*23, NaN, 's', 34]) -> [ 1, 2, 3, 'a', 's', 34 ]</span></span><br></pre></td></tr></table></figure></li>
|
|
49
|
-
</ul>
|
|
50
|
-
<hr>
|
|
51
|
-
<ul>
|
|
52
|
-
<li><p>countOccurrences</p>
|
|
53
|
-
<p>计算数组中值的出现次数。</p>
|
|
54
|
-
<p>使用Array.reduce()在每次遇到数组中的特定值时递增计数器。</p>
|
|
55
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">countOccurrences</span> = (<span class="params">arr, value</span>) => arr.<span class="title function_">reduce</span>(<span class="function">(<span class="params">a, v</span>) =></span> v === value ? a + <span class="number">1</span> : a + <span class="number">0</span>, <span class="number">0</span>);</span><br><span class="line"><span class="comment">// countOccurrences([1,1,2,1,2,3], 1) -> 3</span></span><br></pre></td></tr></table></figure></li>
|
|
56
|
-
</ul>
|
|
57
|
-
<hr>
|
|
58
|
-
<ul>
|
|
59
|
-
<li><p>deepFlatten</p>
|
|
60
|
-
<p>深拼合数组。</p>
|
|
61
|
-
<p>使用递归。使用Array.concat()与空数组 ([]) 和跨页运算符 (…) 来拼合数组。递归拼合作为数组的每个元素。</p>
|
|
62
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">deepFlatten</span> = arr => [].<span class="title function_">concat</span>(...arr.<span class="title function_">map</span>(<span class="function"><span class="params">v</span> =></span> <span class="title class_">Array</span>.<span class="title function_">isArray</span>(v) ? <span class="title function_">deepFlatten</span>(v) : v));</span><br><span class="line"><span class="comment">// deepFlatten([1,[2],[[3],4],5]) -> [1,2,3,4,5]</span></span><br></pre></td></tr></table></figure></li>
|
|
63
|
-
</ul>
|
|
64
|
-
<hr>
|
|
65
|
-
<ul>
|
|
66
|
-
<li><p>difference</p>
|
|
67
|
-
<p>返回两个数组之间的差异。</p>
|
|
68
|
-
<p>从b创建Set , 然后使用Array.filter() on 只保留a b中不包含的值.</p>
|
|
69
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">difference</span> = (<span class="params">a, b</span>) => { <span class="keyword">const</span> s = <span class="keyword">new</span> <span class="title class_">Set</span>(b); <span class="keyword">return</span> a.<span class="title function_">filter</span>(<span class="function"><span class="params">x</span> =></span> !s.<span class="title function_">has</span>(x)); };</span><br><span class="line"><span class="comment">// difference([1,2,3], [1,2,4]) -> [3]</span></span><br></pre></td></tr></table></figure></li>
|
|
70
|
-
</ul>
|
|
71
|
-
<hr>
|
|
72
|
-
<ul>
|
|
73
|
-
<li><p>distinctValuesOfArray</p>
|
|
74
|
-
<p>返回数组的所有不同值。</p>
|
|
75
|
-
<p>使用 ES6 Set和…rest运算符放弃所有重复的值。</p>
|
|
76
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">distinctValuesOfArray</span> = arr => [...<span class="keyword">new</span> <span class="title class_">Set</span>(arr)];</span><br><span class="line"><span class="comment">// distinctValuesOfArray([1,2,2,3,4,4,5]) -> [1,2,3,4,5]</span></span><br></pre></td></tr></table></figure></li>
|
|
77
|
-
</ul>
|
|
78
|
-
<hr>
|
|
79
|
-
<ul>
|
|
80
|
-
<li><p>dropElements</p>
|
|
81
|
-
<p>移除数组中的元素, 直到传递的函数返回true。返回数组中的其余元素。<br>在数组中循环, 使用Array.shift()将数组的第一个元素除去, 直到函数的返回值为true。返回其余元素。</p>
|
|
82
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">dropElements</span> = (<span class="params">arr, func</span>) => {</span><br><span class="line"><span class="keyword">while</span> (arr.<span class="property">length</span> > <span class="number">0</span> && !<span class="title function_">func</span>(arr[<span class="number">0</span>])) arr.<span class="title function_">shift</span>();</span><br><span class="line"><span class="keyword">return</span> arr;</span><br><span class="line">};</span><br><span class="line"><span class="comment">// dropElements([1, 2, 3, 4], n => n >= 3) -> [3,4]</span></span><br></pre></td></tr></table></figure></li>
|
|
83
|
-
</ul>
|
|
84
|
-
<hr>
|
|
85
|
-
<ul>
|
|
86
|
-
<li><p>everyNth</p>
|
|
87
|
-
<p>返回数组中的每个第 n 个元素。</p>
|
|
88
|
-
<p>使用Array.filter()创建一个包含给定数组的每个第 n 个元素的新数组。</p>
|
|
89
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">everyNth</span> = (<span class="params">arr, nth</span>) => arr.<span class="title function_">filter</span>(<span class="function">(<span class="params">e, i</span>) =></span> i % nth === <span class="number">0</span>);</span><br><span class="line"><span class="comment">// everyNth([1,2,3,4,5,6], 2) -> [ 1, 3, 5 ]</span></span><br></pre></td></tr></table></figure></li>
|
|
90
|
-
</ul>
|
|
91
|
-
<hr>
|
|
92
|
-
<ul>
|
|
93
|
-
<li><p>filterNonUnique</p>
|
|
94
|
-
<p>筛选出数组中的非唯一值。</p>
|
|
95
|
-
<p>对于只包含唯一值的数组, 请使用Array.filter() 。</p>
|
|
96
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">filterNonUnique</span> = arr => arr.<span class="title function_">filter</span>(<span class="function"><span class="params">i</span> =></span> arr.<span class="title function_">indexOf</span>(i) === arr.<span class="title function_">lastIndexOf</span>(i));</span><br><span class="line"><span class="comment">// filterNonUnique([1,2,2,3,4,4,5]) -> [1,3,5]</span></span><br></pre></td></tr></table></figure></li>
|
|
97
|
-
</ul>
|
|
98
|
-
<hr>
|
|
99
|
-
<ul>
|
|
100
|
-
<li><p>flatten</p>
|
|
101
|
-
<p>拼合数组。</p>
|
|
102
|
-
<p>使用Array.reduce()获取数组中的所有元素和concat()以拼合它们。</p>
|
|
103
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">flatten</span> = arr => arr.<span class="title function_">reduce</span>(<span class="function">(<span class="params">a, v</span>) =></span> a.<span class="title function_">concat</span>(v), []);</span><br><span class="line"><span class="comment">// flatten([1,[2],3,4]) -> [1,2,3,4]</span></span><br></pre></td></tr></table></figure></li>
|
|
104
|
-
</ul>
|
|
105
|
-
<hr>
|
|
106
|
-
<ul>
|
|
107
|
-
<li><p>flattenDepth</p>
|
|
108
|
-
<p>将数组向上拼合到指定深度。</p>
|
|
109
|
-
<p>使用递归, 递减depth, 每层深度为1。使用Array.reduce()和Array.concat()来合并元素或数组。基本情况下, 对于等于1的depth停止递归。省略第二个元素,depth仅拼合到1的深度 (单个拼合)。</p>
|
|
110
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">flattenDepth</span> = (<span class="params">arr, depth = <span class="number">1</span></span>) =></span><br><span class="line">depth != <span class="number">1</span> ? arr.<span class="title function_">reduce</span>(<span class="function">(<span class="params">a, v</span>) =></span> a.<span class="title function_">concat</span>(<span class="title class_">Array</span>.<span class="title function_">isArray</span>(v) ? <span class="title function_">flattenDepth</span>(v, depth - <span class="number">1</span>) : v), [])</span><br><span class="line">: arr.<span class="title function_">reduce</span>(<span class="function">(<span class="params">a, v</span>) =></span> a.<span class="title function_">concat</span>(v), []);</span><br><span class="line"><span class="comment">// flattenDepth([1,[2],[[[3],4],5]], 2) -> [1,2,[3],4,5]</span></span><br></pre></td></tr></table></figure></li>
|
|
111
|
-
</ul>
|
|
112
|
-
<hr>
|
|
113
|
-
<ul>
|
|
114
|
-
<li><p>groupby</p>
|
|
115
|
-
<p>根据给定函数对数组元素进行分组。</p>
|
|
116
|
-
<p>使用Array.map()将数组的值映射到函数或属性名。使用Array.reduce()创建一个对象, 其中的键是从映射的结果生成的。</p>
|
|
117
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//code from http://caibaojian.com/30-seconds-of-code.html</span></span><br><span class="line"><span class="keyword">const</span> <span class="title function_">groupBy</span> = (<span class="params">arr, func</span>) =></span><br><span class="line">arr.<span class="title function_">map</span>(<span class="keyword">typeof</span> func === <span class="string">'function'</span> ? func : <span class="function"><span class="params">val</span> =></span> val[func])</span><br><span class="line">.<span class="title function_">reduce</span>(<span class="function">(<span class="params">acc, val, i</span>) =></span> { acc[val] = (acc[val] || []).<span class="title function_">concat</span>(arr[i]); <span class="keyword">return</span> acc; }, {});</span><br><span class="line"><span class="comment">// groupBy([6.1, 4.2, 6.3], Math.floor) -> {4: [4.2], 6: [6.1, 6.3]}</span></span><br><span class="line"><span class="comment">// groupBy(['one', 'two', 'three'], 'length') -> {3: ['one', 'two'], 5: ['three']}</span></span><br></pre></td></tr></table></figure></li>
|
|
118
|
-
</ul>
|
|
119
|
-
<hr>
|
|
120
|
-
<ul>
|
|
121
|
-
<li><p>head</p>
|
|
122
|
-
<p>返回列表的头。</p>
|
|
123
|
-
<p>使用arr[0]可返回传递的数组的第一个元素。</p>
|
|
124
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">head</span> = arr => arr[<span class="number">0</span>];</span><br><span class="line"><span class="comment">// head([1,2,3]) -> 1</span></span><br></pre></td></tr></table></figure></li>
|
|
125
|
-
</ul>
|
|
126
|
-
<hr>
|
|
127
|
-
<ul>
|
|
128
|
-
<li><p>initial</p>
|
|
129
|
-
<p>返回除最后一个数组之外的所有元素。</p>
|
|
130
|
-
<p>使用 “ arr.slice(0,-1)” 返回数组的最后一个元素。</p>
|
|
131
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">initial</span> = arr => arr.<span class="title function_">slice</span>(<span class="number">0</span>, -<span class="number">1</span>);</span><br><span class="line"><span class="comment">// initial([1,2,3]) -> [1,2]</span></span><br></pre></td></tr></table></figure></li>
|
|
132
|
-
</ul>
|
|
133
|
-
<hr>
|
|
134
|
-
<ul>
|
|
135
|
-
<li><p>initializeArrayWithRange</p>
|
|
136
|
-
<p>初始化包含指定范围内的数字的数组。</p>
|
|
137
|
-
<p>使用Array(end-start)创建所需长度的数组Array.map()以填充区域中所需的值。可以省略start以使用默认值0.</p>
|
|
138
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">initializeArrayWithRange</span> = (<span class="params">end, start = <span class="number">0</span></span>) =></span><br><span class="line"><span class="title class_">Array</span>.<span class="title function_">from</span>({ <span class="attr">length</span>: end - start }).<span class="title function_">map</span>(<span class="function">(<span class="params">v, i</span>) =></span> i + start);</span><br><span class="line"><span class="comment">// initializeArrayWithRange(5) -> [0,1,2,3,4]</span></span><br></pre></td></tr></table></figure></li>
|
|
139
|
-
</ul>
|
|
140
|
-
<hr>
|
|
141
|
-
<ul>
|
|
142
|
-
<li><p>initializeArrayWithValues</p>
|
|
143
|
-
<p>初始化并填充具有指定值的数组。</p>
|
|
144
|
-
<p>使用Array(n)创建所需长度的数组, fill(v)以填充所需的值。可以省略value以使用默认值0.</p>
|
|
145
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">initializeArrayWithValues</span> = (<span class="params">n, value = <span class="number">0</span></span>) => <span class="title class_">Array</span>(n).<span class="title function_">fill</span>(value);</span><br><span class="line"><span class="comment">// initializeArrayWithValues(5, 2) -> [2,2,2,2,2]</span></span><br></pre></td></tr></table></figure></li>
|
|
146
|
-
</ul>
|
|
147
|
-
<hr>
|
|
148
|
-
<ul>
|
|
149
|
-
<li><p>intersection</p>
|
|
150
|
-
<ul>
|
|
151
|
-
<li><p>返回两个数组中存在的元素的列表。</p>
|
|
152
|
-
<p>从b创建Set , 然后使用Array.filter() on a只保留b中包含的值.</p>
|
|
153
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">intersection</span> = (<span class="params">a, b</span>) => { <span class="keyword">const</span> s = <span class="keyword">new</span> <span class="title class_">Set</span>(b); <span class="keyword">return</span> a.<span class="title function_">filter</span>(<span class="function"><span class="params">x</span> =></span> s.<span class="title function_">has</span>(x)); };</span><br><span class="line"><span class="comment">// intersection([1,2,3], [4,3,2]) -> [2,3]</span></span><br></pre></td></tr></table></figure>
|
|
154
|
-
</li>
|
|
155
|
-
<li><p>返回两个数组中不共有的元素的列表。</p>
|
|
156
|
-
<p>从b创建Set , 然后使用Array.filter() on a只保留b中不包含的值.</p>
|
|
157
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">intersection</span> = (<span class="params">a, b</span>) => { <span class="keyword">const</span> s = <span class="keyword">new</span> <span class="title class_">Set</span>(b); <span class="keyword">return</span> a.<span class="title function_">filter</span>(<span class="function"><span class="params">x</span> =></span> !s.<span class="title function_">has</span>(x)); };</span><br><span class="line"><span class="comment">// console.log(intersection([4,2,3,1,5], [3,1,2])) -> [4,5]</span></span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> <span class="title function_">intersection</span> = (<span class="params">a, b</span>) => { <span class="keyword">const</span> s = <span class="keyword">new</span> <span class="title class_">Set</span>(b); <span class="keyword">return</span> a.<span class="title function_">filter</span>(<span class="function"><span class="params">x</span> =></span> !s.<span class="title function_">has</span>(x)); };</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="title function_">intersection</span>([<span class="number">4</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">1</span>,<span class="number">5</span>], [<span class="number">3</span>,<span class="number">1</span>,<span class="number">2</span>])) -> [<span class="number">4</span>,<span class="number">5</span>]</span><br></pre></td></tr></table></figure></li>
|
|
158
|
-
</ul>
|
|
159
|
-
</li>
|
|
160
|
-
</ul>
|
|
161
|
-
<hr>
|
|
162
|
-
<ul>
|
|
163
|
-
<li><p>last</p>
|
|
164
|
-
<p>返回数组中的最后一个元素。</p>
|
|
165
|
-
<p>使用arr.length - 1可计算给定数组的最后一个元素的索引并返回它。</p>
|
|
166
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">last</span> = arr => arr[arr.<span class="property">length</span> - <span class="number">1</span>];</span><br><span class="line"><span class="comment">// last([1,2,3]) -> 3</span></span><br></pre></td></tr></table></figure></li>
|
|
167
|
-
</ul>
|
|
168
|
-
<hr>
|
|
169
|
-
<ul>
|
|
170
|
-
<li><p>mapObject</p>
|
|
171
|
-
<p>使用函数将数组的值映射到对象, 其中键值对由原始值作为键和映射值组成。</p>
|
|
172
|
-
<p>使用匿名内部函数范围来声明未定义的内存空间, 使用闭包来存储返回值。使用新的Array可将该数组与函数的映射放在其数据集上, 而逗号运算符返回第二个步骤, 而不需要从一个上下文移动到另一个环境 (由于关闭和操作顺序)。</p>
|
|
173
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">mapObject</span> = (<span class="params">arr, fn</span>) =></span><br><span class="line">(<span class="function"><span class="params">a</span> =></span> (a = [arr, arr.<span class="title function_">map</span>(fn)], a[<span class="number">0</span>].<span class="title function_">reduce</span>( <span class="function">(<span class="params">acc,val,ind</span>) =></span> (acc[val] = a[<span class="number">1</span>][ind], acc), {}) )) ( );</span><br><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment">const squareIt = arr => mapObject(arr, a => a*a)</span></span><br><span class="line"><span class="comment">squareIt([1,2,3]) // { 1: 1, 2: 4, 3: 9 }</span></span><br><span class="line"><span class="comment">*/</span></span><br></pre></td></tr></table></figure></li>
|
|
174
|
-
</ul>
|
|
175
|
-
<hr>
|
|
176
|
-
<ul>
|
|
177
|
-
<li><p>nthElement</p>
|
|
178
|
-
<p>返回数组的第 n 个元素。</p>
|
|
179
|
-
<p>使用Array.slice()可获取包含第 n 个元素的数组。如果索引超出界限, 则返回[]。省略第二个参数n, 以获取数组的第一个元素。</p>
|
|
180
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">nthElement</span> = (<span class="params">arr, n=<span class="number">0</span></span>) => (n><span class="number">0</span>? arr.<span class="title function_">slice</span>(n,n+<span class="number">1</span>) : arr.<span class="title function_">slice</span>(n))[<span class="number">0</span>];</span><br><span class="line"><span class="comment">// nthElement(['a','b','c'],1) -> 'b'</span></span><br><span class="line"><span class="comment">// nthElement(['a','b','b'],-3) -> 'a'</span></span><br></pre></td></tr></table></figure></li>
|
|
181
|
-
</ul>
|
|
182
|
-
<hr>
|
|
183
|
-
<ul>
|
|
184
|
-
<li><p>pick</p>
|
|
185
|
-
<p>从对象中选取对应于给定键的键值对。</p>
|
|
186
|
-
<p>使用Array.reduce()将筛选/选取的密钥转换回具有相应键值对的对象 (如果在 obj 中存在该键)。</p>
|
|
187
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">pick</span> = (<span class="params">obj, arr</span>) =></span><br><span class="line"> arr.<span class="title function_">reduce</span>(<span class="function">(<span class="params">acc, curr</span>) =></span> (curr <span class="keyword">in</span> obj && (acc[curr] = obj[curr]), acc), {});</span><br><span class="line"><span class="comment">// pick({ 'a': 1, 'b': '2', 'c': 3 }, ['a', 'c']) -> { 'a': 1, 'c': 3 }</span></span><br></pre></td></tr></table></figure></li>
|
|
188
|
-
</ul>
|
|
189
|
-
<hr>
|
|
190
|
-
<ul>
|
|
191
|
-
<li><p>pull</p>
|
|
192
|
-
<p>对原始数组进行变异, 以筛选出指定的值。</p>
|
|
193
|
-
<p>使用Array.filter()和Array.includes()来拉出不需要的值。使用Array.length = 0可将传入的数组中的长度重置为零, 并将其设置为Array.push() , 以便仅使用所提取的值填充它。</p>
|
|
194
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">pull</span> = (<span class="params">arr, ...args</span>) => {</span><br><span class="line"> <span class="keyword">let</span> pulled = arr.<span class="title function_">filter</span>(<span class="function">(<span class="params">v, i</span>) =></span> !args.<span class="title function_">includes</span>(v));</span><br><span class="line"> arr.<span class="property">length</span> = <span class="number">0</span>; pulled.<span class="title function_">forEach</span>(<span class="function"><span class="params">v</span> =></span> arr.<span class="title function_">push</span>(v));</span><br><span class="line">};</span><br><span class="line"><span class="comment">// let myArray = ['a', 'b', 'c', 'a', 'b', 'c'];</span></span><br><span class="line"><span class="comment">// pull(myArray, 'a', 'c');</span></span><br><span class="line"><span class="comment">// console.log(myArray) -> [ 'b', 'b' ]</span></span><br></pre></td></tr></table></figure></li>
|
|
195
|
-
</ul>
|
|
196
|
-
<hr>
|
|
197
|
-
<ul>
|
|
198
|
-
<li><p>remove</p>
|
|
199
|
-
<p>从数组中移除给定函数返回false的元素.<br>使用Array.filter()查找返回 truthy 值的数组元素和Array.reduce()以使用Array.splice()删除元素。使用三参数 ( func value, index, array调用函数).</p>
|
|
200
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">remove</span> = (<span class="params">arr, func</span>) =></span><br><span class="line"><span class="title class_">Array</span>.<span class="title function_">isArray</span>(arr)</span><br><span class="line">? arr.<span class="title function_">filter</span>(func).<span class="title function_">reduce</span>(<span class="function">(<span class="params">acc, val</span>) =></span> {</span><br><span class="line"> arr.<span class="title function_">splice</span>(arr.<span class="title function_">indexOf</span>(val), <span class="number">1</span>); <span class="keyword">return</span> acc.<span class="title function_">concat</span>(val);</span><br><span class="line"> }, [])</span><br><span class="line">: [];</span><br><span class="line"><span class="comment">// remove([1, 2, 3, 4], n => n % 2 == 0) -> [2, 4]</span></span><br></pre></td></tr></table></figure></li>
|
|
201
|
-
</ul>
|
|
202
|
-
<hr>
|
|
203
|
-
<ul>
|
|
204
|
-
<li><p>sample</p>
|
|
205
|
-
<p>返回数组中的随机元素。</p>
|
|
206
|
-
<p>使用Math.random()生成一个随机数, 将它与length相乘, 并使用数学将其舍入到最接近的整数Math.floor()。此方法也适用于字符串。</p>
|
|
207
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">sample</span> = arr => arr[<span class="title class_">Math</span>.<span class="title function_">floor</span>(<span class="title class_">Math</span>.<span class="title function_">random</span>() * arr.<span class="property">length</span>)];</span><br><span class="line"><span class="comment">// sample([3, 7, 9, 11]) -> 9</span></span><br></pre></td></tr></table></figure></li>
|
|
208
|
-
</ul>
|
|
209
|
-
<hr>
|
|
210
|
-
<ul>
|
|
211
|
-
<li><p>shuffle</p>
|
|
212
|
-
<p>随机数组值的顺序。</p>
|
|
213
|
-
<p>使用Array.sort()可在比较器中使用Math.random()重新排序元素。</p>
|
|
214
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">shuffle</span> = arr => arr.<span class="title function_">sort</span>(<span class="function">() =></span> <span class="title class_">Math</span>.<span class="title function_">random</span>() - <span class="number">0.5</span>);</span><br><span class="line"><span class="comment">// shuffle([1,2,3]) -> [2,3,1]</span></span><br></pre></td></tr></table></figure></li>
|
|
215
|
-
</ul>
|
|
216
|
-
<hr>
|
|
217
|
-
<ul>
|
|
218
|
-
<li><p>similarity</p>
|
|
219
|
-
<p>返回两个数组中都显示的元素的数组。</p>
|
|
220
|
-
<p>使用filter()可删除不属于values的值, 使用includes()确定.·</p>
|
|
221
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">similarity</span> = (<span class="params">arr, values</span>) => arr.<span class="title function_">filter</span>(<span class="function"><span class="params">v</span> =></span> values.<span class="title function_">includes</span>(v));</span><br><span class="line"><span class="comment">// similarity([1,2,3], [1,2,4]) -> [1,2]</span></span><br></pre></td></tr></table></figure></li>
|
|
222
|
-
</ul>
|
|
223
|
-
<hr>
|
|
224
|
-
<ul>
|
|
225
|
-
<li><p>symmetricDifference</p>
|
|
226
|
-
<p>返回两个数组之间的对称差。</p>
|
|
227
|
-
<p>从每个数组创建一个Set , 然后对它们中的每一个都使用Array.filter() , 以便只保留其他值中不包含的数值。</p>
|
|
228
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">symmetricDifference</span> = (<span class="params">a, b</span>) => {</span><br><span class="line"> <span class="keyword">const</span> sA = <span class="keyword">new</span> <span class="title class_">Set</span>(a), sB = <span class="keyword">new</span> <span class="title class_">Set</span>(b);</span><br><span class="line"> <span class="keyword">return</span> [...a.<span class="title function_">filter</span>(<span class="function"><span class="params">x</span> =></span> !sB.<span class="title function_">has</span>(x)), ...b.<span class="title function_">filter</span>(<span class="function"><span class="params">x</span> =></span> !sA.<span class="title function_">has</span>(x))];</span><br><span class="line">}</span><br><span class="line"><span class="comment">// symmetricDifference([1,2,3], [1,2,4]) -> [3,4]</span></span><br></pre></td></tr></table></figure></li>
|
|
229
|
-
</ul>
|
|
230
|
-
<hr>
|
|
231
|
-
<ul>
|
|
232
|
-
<li><p>tail</p>
|
|
233
|
-
<p>返回数组中的所有元素, 除第一个。</p>
|
|
234
|
-
<p>如果数组的length大于1, 则返回arr.slice(1) , 否则返回整个数组。</p>
|
|
235
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">tail</span> = arr => arr.<span class="property">length</span> > <span class="number">1</span> ? arr.<span class="title function_">slice</span>(<span class="number">1</span>) : arr;</span><br><span class="line"><span class="comment">// tail([1,2,3]) -> [2,3]</span></span><br><span class="line"><span class="comment">// tail([1]) -> [1]</span></span><br></pre></td></tr></table></figure></li>
|
|
236
|
-
</ul>
|
|
237
|
-
<hr>
|
|
238
|
-
<ul>
|
|
239
|
-
<li><p>take</p>
|
|
240
|
-
<p>返回一个数组, 其中 n 个元素从开始处移除。</p>
|
|
241
|
-
<p>使用Array.slice()创建数组的切片, 其中包含从开始处取出的n元素。</p>
|
|
242
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">take</span> = (<span class="params">arr, n = <span class="number">1</span></span>) => arr.<span class="title function_">slice</span>(<span class="number">0</span>, n);</span><br><span class="line"><span class="comment">// take([1, 2, 3], 5) -> [1, 2, 3]</span></span><br><span class="line"><span class="comment">// take([1, 2, 3], 0) -> []</span></span><br></pre></td></tr></table></figure></li>
|
|
243
|
-
</ul>
|
|
244
|
-
<hr>
|
|
245
|
-
<ul>
|
|
246
|
-
<li><p>takeRight</p>
|
|
247
|
-
<p>返回一个数组, 其中 n 个元素从末尾移除。</p>
|
|
248
|
-
<p>使用Array.slice()创建数组的切片, 其中包含从末尾取出的n元素。</p>
|
|
249
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">takeRight</span> = (<span class="params">arr, n = <span class="number">1</span></span>) => arr.<span class="title function_">slice</span>(arr.<span class="property">length</span> - n, arr.<span class="property">length</span>);</span><br><span class="line"><span class="comment">// takeRight([1, 2, 3], 2) -> [ 2, 3 ]</span></span><br><span class="line"><span class="comment">// takeRight([1, 2, 3]) -> [3]</span></span><br></pre></td></tr></table></figure></li>
|
|
250
|
-
</ul>
|
|
251
|
-
<hr>
|
|
252
|
-
<ul>
|
|
253
|
-
<li><p>union</p>
|
|
254
|
-
<p>返回在两个数组中的任意一个中存在的每个元素。</p>
|
|
255
|
-
<p>创建一个Set , 其中包含a和b的所有值, 并将其转换为数组。</p>
|
|
256
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">union</span> = (<span class="params">a, b</span>) => <span class="title class_">Array</span>.<span class="title function_">from</span>(<span class="keyword">new</span> <span class="title class_">Set</span>([...a, ...b]));</span><br><span class="line"><span class="comment">// union([1,2,3], [4,3,2]) -> [1,2,3,4]</span></span><br></pre></td></tr></table></figure></li>
|
|
257
|
-
</ul>
|
|
258
|
-
<hr>
|
|
259
|
-
<ul>
|
|
260
|
-
<li><p>without</p>
|
|
261
|
-
<p>筛选出数组中具有指定值之一的元素。</p>
|
|
262
|
-
<p>使用Array.filter()创建不包括的数组 (使用!Array.includes()) 所有给定值。</p>
|
|
263
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">without</span> = (<span class="params">arr, ...args</span>) => arr.<span class="title function_">filter</span>(<span class="function"><span class="params">v</span> =></span> !args.<span class="title function_">includes</span>(v));</span><br><span class="line"><span class="comment">// without([2, 1, 2, 3], 1, 2) -> [3]</span></span><br></pre></td></tr></table></figure></li>
|
|
264
|
-
</ul>
|
|
265
|
-
<hr>
|
|
266
|
-
<ul>
|
|
267
|
-
<li><p>zip</p>
|
|
268
|
-
<p>创建基于原始数组中的位置分组的元素数组。</p>
|
|
269
|
-
<p>使用Math.max.apply()获取参数中最长的数组。创建一个以该长度为返回值的数组, 并使用 map 函数创建一个分组元素的数组Array.from()如果参数数组的长度不同, 则在未找到任何值的情况下使用undefined。</p>
|
|
270
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">zip</span> = (<span class="params">...arrays</span>) => {</span><br><span class="line"> <span class="keyword">const</span> maxLength = <span class="title class_">Math</span>.<span class="title function_">max</span>(...arrays.<span class="title function_">map</span>(<span class="function"><span class="params">x</span> =></span> x.<span class="property">length</span>));</span><br><span class="line"> <span class="keyword">return</span> <span class="title class_">Array</span>.<span class="title function_">from</span>({<span class="attr">length</span>: maxLength}).<span class="title function_">map</span>(<span class="function">(<span class="params">_, i</span>) =></span> {</span><br><span class="line"> <span class="keyword">return</span> <span class="title class_">Array</span>.<span class="title function_">from</span>({<span class="attr">length</span>: arrays.<span class="property">length</span>}, <span class="function">(<span class="params">_, k</span>) =></span> arrays[k][i]);</span><br><span class="line"> })</span><br><span class="line">}</span><br><span class="line"><span class="comment">//zip(['a', 'b'], [1, 2], [true, false]); -> [['a', 1, true], ['b', 2, false]]</span></span><br><span class="line"><span class="comment">//zip(['a'], [1, 2], [true, false]); -> [['a', 1, true], [undefined, 2, false]]</span></span><br></pre></td></tr></table></figure></li>
|
|
271
|
-
</ul>
|
|
272
|
-
<blockquote>
|
|
273
|
-
<h2 id="浏览器"><a href="#浏览器" class="headerlink" title="浏览器"></a>浏览器</h2></blockquote>
|
|
274
|
-
<ul>
|
|
275
|
-
<li><p>bottomVisible</p>
|
|
276
|
-
<p>如果页的底部可见, 则返回true , 否则为false 。</p>
|
|
277
|
-
<p>使用scrollY、 scrollHeight和clientHeight来确定页面底部是否可见。</p>
|
|
278
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">bottomVisible</span> = (<span class="params"></span>) =></span><br><span class="line"> <span class="variable language_">document</span>.<span class="property">documentElement</span>.<span class="property">clientHeight</span> + <span class="variable language_">window</span>.<span class="property">scrollY</span> >= <span class="variable language_">document</span>.<span class="property">documentElement</span>.<span class="property">scrollHeight</span> || <span class="variable language_">document</span>.<span class="property">documentElement</span>.<span class="property">clientHeight</span>;</span><br><span class="line"><span class="comment">// bottomVisible() -> true</span></span><br></pre></td></tr></table></figure></li>
|
|
279
|
-
</ul>
|
|
280
|
-
<hr>
|
|
281
|
-
<ul>
|
|
282
|
-
<li><p>currentURL</p>
|
|
283
|
-
<p>返回当前 URL。</p>
|
|
284
|
-
<p>使用window.location.href获取当前 URL。</p>
|
|
285
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">currentURL</span> = (<span class="params"></span>) => <span class="variable language_">window</span>.<span class="property">location</span>.<span class="property">href</span>;</span><br><span class="line"><span class="comment">// currentUrl() -> 'https://google.com'</span></span><br></pre></td></tr></table></figure></li>
|
|
286
|
-
</ul>
|
|
287
|
-
<hr>
|
|
288
|
-
<ul>
|
|
289
|
-
<li><p>elementIsVisibleInViewport</p>
|
|
290
|
-
<p>如果指定的元素在视区中可见, 则返回true , 否则为false 。</p>
|
|
291
|
-
<p>使用Element.getBoundingClientRect()和window.inner(Width|Height)值以确定给定元素在视区中是否可见。省略第二个参数以确定该元素是否完全可见, 或指定true以确定它是否部分可见。</p>
|
|
292
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">elementIsVisibleInViewport</span> = (<span class="params">el, partiallyVisible = <span class="literal">false</span></span>) => {</span><br><span class="line"><span class="keyword">const</span> { top, left, bottom, right } = el.<span class="title function_">getBoundingClientRect</span>();</span><br><span class="line"><span class="keyword">return</span> partiallyVisible</span><br><span class="line">? ((top > <span class="number">0</span> && top < innerHeight) || (bottom > <span class="number">0</span> && bottom < innerHeight)) &&</span><br><span class="line"> ((left > <span class="number">0</span> && left < innerWidth) || (right > <span class="number">0</span> && right < innerWidth))</span><br><span class="line">: top >= <span class="number">0</span> && left >= <span class="number">0</span> && bottom <= innerHeight && right <= innerWidth;</span><br><span class="line">};</span><br><span class="line"><span class="comment">// e.g. 100x100 viewport and a 10x10px element at position {top: -1, left: 0, bottom: 9, right: 10}</span></span><br><span class="line"><span class="comment">// elementIsVisibleInViewport(el) -> false (not fully visible)</span></span><br><span class="line"><span class="comment">// elementIsVisibleInViewport(el, true) -> true (partially visible)</span></span><br></pre></td></tr></table></figure></li>
|
|
293
|
-
</ul>
|
|
294
|
-
<hr>
|
|
295
|
-
<ul>
|
|
296
|
-
<li><p>getScrollPosition</p>
|
|
297
|
-
<p>返回当前页的滚动位置。</p>
|
|
298
|
-
<p>如果已定义, 则使用pageXOffset和pageYOffset , 否则scrollLeft和scrollTop。可以省略el以使用window的默认值.</p>
|
|
299
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">getScrollPosition</span> = (<span class="params">el = <span class="variable language_">window</span></span>) =></span><br><span class="line"> ({<span class="attr">x</span>: (el.<span class="property">pageXOffset</span> !== <span class="literal">undefined</span>) ? el.<span class="property">pageXOffset</span> : el.<span class="property">scrollLeft</span>,</span><br><span class="line"> <span class="attr">y</span>: (el.<span class="property">pageYOffset</span> !== <span class="literal">undefined</span>) ? el.<span class="property">pageYOffset</span> : el.<span class="property">scrollTop</span>});</span><br><span class="line"><span class="comment">// getScrollPosition() -> {x: 0, y: 200}</span></span><br></pre></td></tr></table></figure></li>
|
|
300
|
-
</ul>
|
|
301
|
-
<hr>
|
|
302
|
-
<ul>
|
|
303
|
-
<li><p>getURLParameters</p>
|
|
304
|
-
<p>返回一个包含当前 URL 参数的对象。</p>
|
|
305
|
-
<p>使用match()与适当的正则表达式来获取所有键值对, Array.reduce()可将它们映射并合并到单个对象中。将location.search作为要应用于当前url的参数传递.</p>
|
|
306
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">getURLParameters</span> = url =></span><br><span class="line">url.<span class="title function_">match</span>(<span class="regexp">/([^?=&]+)(=([^&]*))/g</span>).<span class="title function_">reduce</span>(</span><br><span class="line"> <span class="function">(<span class="params">a, v</span>) =></span> (a[v.<span class="title function_">slice</span>(<span class="number">0</span>, v.<span class="title function_">indexOf</span>(<span class="string">'='</span>))] = v.<span class="title function_">slice</span>(v.<span class="title function_">indexOf</span>(<span class="string">'='</span>) + <span class="number">1</span>), a), {}</span><br><span class="line">);</span><br><span class="line"><span class="comment">// getURLParameters('http://url.com/page?name=Adam&surname=Smith') -> {name: 'Adam', surname: 'Smith'}</span></span><br></pre></td></tr></table></figure></li>
|
|
307
|
-
</ul>
|
|
308
|
-
<hr>
|
|
309
|
-
<ul>
|
|
310
|
-
<li><p>redirect</p>
|
|
311
|
-
<p>重定向到指定的 URL。</p>
|
|
312
|
-
<p>使用window.location.href或window.location.replace()重定向到url。传递第二个参数以模拟链接单击 (true -默认值) 或 HTTP 重定向 (false).</p>
|
|
313
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">redirect</span> = (<span class="params">url, asLink = <span class="literal">true</span></span>) =></span><br><span class="line"> asLink ? <span class="variable language_">window</span>.<span class="property">location</span>.<span class="property">href</span> = url : <span class="variable language_">window</span>.<span class="property">location</span>.<span class="title function_">replace</span>(url);</span><br><span class="line"><span class="comment">// redirect('https://google.com')</span></span><br></pre></td></tr></table></figure></li>
|
|
314
|
-
</ul>
|
|
315
|
-
<hr>
|
|
316
|
-
<ul>
|
|
317
|
-
<li><p>scrollToTop</p>
|
|
318
|
-
<p>平滑滚动到页面顶部。</p>
|
|
319
|
-
<p>使用document.documentElement.scrollTop或document.body.scrollTop从顶部获取距离。从顶部的距离的一小部分滚动。使用window.requestAnimationFrame()对滚动进行动画处理。</p>
|
|
320
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">scrollToTop</span> = (<span class="params"></span>) => {</span><br><span class="line"><span class="keyword">const</span> c = <span class="variable language_">document</span>.<span class="property">documentElement</span>.<span class="property">scrollTop</span> || <span class="variable language_">document</span>.<span class="property">body</span>.<span class="property">scrollTop</span>;</span><br><span class="line"> <span class="keyword">if</span> (c > <span class="number">0</span>) {</span><br><span class="line"> <span class="variable language_">window</span>.<span class="title function_">requestAnimationFrame</span>(scrollToTop);</span><br><span class="line"> <span class="variable language_">window</span>.<span class="title function_">scrollTo</span>(<span class="number">0</span>, c - c / <span class="number">8</span>);</span><br><span class="line"> }</span><br><span class="line">};</span><br><span class="line"><span class="comment">// scrollToTop()</span></span><br></pre></td></tr></table></figure></li>
|
|
321
|
-
</ul>
|
|
322
|
-
<blockquote>
|
|
323
|
-
<h2 id="日期"><a href="#日期" class="headerlink" title="日期"></a>日期</h2></blockquote>
|
|
324
|
-
<ul>
|
|
325
|
-
<li><p>getDaysDiffBetweenDates</p>
|
|
326
|
-
<p>返回两个日期之间的差异 (以天为值)。</p>
|
|
327
|
-
<p>计算Date对象之间的差异 (以天为)。</p>
|
|
328
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">getDaysDiffBetweenDates</span> = (<span class="params">dateInitial, dateFinal</span>) => (dateFinal - dateInitial) / (<span class="number">1000</span> * <span class="number">3600</span> * <span class="number">24</span>);</span><br><span class="line"><span class="comment">// getDaysDiffBetweenDates(new Date("2017-12-13"), new Date("2017-12-22")) -> 9</span></span><br></pre></td></tr></table></figure></li>
|
|
329
|
-
</ul>
|
|
330
|
-
<hr>
|
|
331
|
-
<ul>
|
|
332
|
-
<li><p>JSONToDate</p>
|
|
333
|
-
<p>将 JSON 对象转换为日期。</p>
|
|
334
|
-
<p>使用Date(), 将 JSON 格式的日期转换为可读格式 (dd/mm/yyyy日)).</p>
|
|
335
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">JSONToDate</span> = arr => {</span><br><span class="line"> <span class="keyword">const</span> dt = <span class="keyword">new</span> <span class="title class_">Date</span>(<span class="built_in">parseInt</span>(arr.<span class="title function_">toString</span>().<span class="title function_">substr</span>(<span class="number">6</span>)));</span><br><span class="line"> <span class="keyword">return</span> <span class="string">`<span class="subst">${ dt.getDate() }</span>/<span class="subst">${ dt.getMonth() + <span class="number">1</span> }</span>/<span class="subst">${ dt.getFullYear() }</span>`</span></span><br><span class="line">};</span><br><span class="line"><span class="comment">// JSONToDate(/Date(1489525200000)/) -> "14/3/2017"</span></span><br></pre></td></tr></table></figure></li>
|
|
336
|
-
</ul>
|
|
337
|
-
<hr>
|
|
338
|
-
<ul>
|
|
339
|
-
<li><p>toEnglishDate</p>
|
|
340
|
-
<p>将日期从美国格式转换为英文格式。</p>
|
|
341
|
-
<p>使用Date.toISOString()、split(‘T’)和replace()将日期从美式格式转换为英文格式。如果传递的时间不能转换为日期, 则抛出错误。</p>
|
|
342
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">toEnglishDate</span> = (<span class="params">time</span>) =></span><br><span class="line"> {<span class="keyword">try</span>{<span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">Date</span>(time).<span class="title function_">toISOString</span>().<span class="title function_">split</span>(<span class="string">'T'</span>)[<span class="number">0</span>].<span class="title function_">replace</span>(<span class="regexp">/-/g</span>, <span class="string">'/'</span>)}<span class="keyword">catch</span>(e){<span class="keyword">return</span>} };</span><br><span class="line"><span class="comment">// toEnglishDate('09/21/2010') -> '21/09/2010'</span></span><br></pre></td></tr></table></figure></li>
|
|
343
|
-
</ul>
|
|
344
|
-
<blockquote>
|
|
345
|
-
<h2 id="功能"><a href="#功能" class="headerlink" title="功能"></a>功能</h2></blockquote>
|
|
346
|
-
<ul>
|
|
347
|
-
<li><p>chainAsync</p>
|
|
348
|
-
<p>链异步函数。</p>
|
|
349
|
-
<p>循环遍历包含异步事件的函数数组, 当每个异步事件完成时调用next 。</p>
|
|
350
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">chainAsync</span> = fns => { <span class="keyword">let</span> curr = <span class="number">0</span>; <span class="keyword">const</span> <span class="title function_">next</span> = (<span class="params"></span>) => fns[curr++](next); <span class="title function_">next</span>(); };</span><br><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment">chainAsync([</span></span><br><span class="line"><span class="comment"> next => { console.log('0 seconds'); setTimeout(next, 1000); },</span></span><br><span class="line"><span class="comment"> next => { console.log('1 second'); setTimeout(next, 1000); },</span></span><br><span class="line"><span class="comment"> next => { console.log('2 seconds'); }</span></span><br><span class="line"><span class="comment">])</span></span><br><span class="line"><span class="comment">*/</span></span><br></pre></td></tr></table></figure></li>
|
|
351
|
-
</ul>
|
|
352
|
-
<hr>
|
|
353
|
-
<ul>
|
|
354
|
-
<li><p>compose</p>
|
|
355
|
-
<p>执行从右向左的函数组合。</p>
|
|
356
|
-
<p>使用Array.reduce()执行从右向左的函数组合。最后一个 (最右边) 的函数可以接受一个或多个参数;其余的函数必须是一元的。</p>
|
|
357
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">compose</span> = (<span class="params">...fns</span>) => fns.<span class="title function_">reduce</span>(<span class="function">(<span class="params">f, g</span>) =></span> <span class="function">(<span class="params">...args</span>) =></span> <span class="title function_">f</span>(<span class="title function_">g</span>(...args)));</span><br><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment">const add5 = x => x + 5</span></span><br><span class="line"><span class="comment">const multiply = (x, y) => x * y</span></span><br><span class="line"><span class="comment">const multiplyAndAdd5 = compose(add5, multiply)</span></span><br><span class="line"><span class="comment">multiplyAndAdd5(5, 2) -> 15</span></span><br><span class="line"><span class="comment">*/</span></span><br></pre></td></tr></table></figure></li>
|
|
358
|
-
</ul>
|
|
359
|
-
<hr>
|
|
360
|
-
<ul>
|
|
361
|
-
<li><p>curry</p>
|
|
362
|
-
<p>Curries a function.</p>
|
|
363
|
-
<p>使用递归。如果提供的参数 (变量) 的数量足够, 请调用传递的函数args f。否则, 返回需要其余参数的扩充函数f 。如果你想咖喱一个函数, 接受可变数目的参数 (如Math.min()), 可以选择将参数的个数传递到第二个参数arity (可变函数).</p>
|
|
364
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">curry</span> = (<span class="params">fn, arity = fn.length, ...args</span>) =></span><br><span class="line"> <span class="function"><span class="params">arity</span> =></span> args.<span class="property">length</span></span><br><span class="line"> ? <span class="title function_">fn</span>(...args)</span><br><span class="line"> : curry.<span class="title function_">bind</span>(<span class="literal">null</span>, fn, arity, ...args);</span><br><span class="line"><span class="comment">// curry(Math.pow)(2)(10) -> 1024</span></span><br><span class="line"><span class="comment">// curry(Math.min, 3)(10)(50)(2) -> 2</span></span><br></pre></td></tr></table></figure></li>
|
|
365
|
-
</ul>
|
|
366
|
-
<hr>
|
|
367
|
-
<ul>
|
|
368
|
-
<li><p>functionName</p>
|
|
369
|
-
<p>记录函数的名称。</p>
|
|
370
|
-
<p>使用console.debug()和传递的方法的name属性将方法的名称记录到控制台的debug通道中。</p>
|
|
371
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">functionName</span> = fn => (<span class="variable language_">console</span>.<span class="title function_">debug</span>(fn.<span class="property">name</span>), fn);</span><br><span class="line"><span class="comment">// functionName(Math.max) -> max (logged in debug channel of console)</span></span><br></pre></td></tr></table></figure></li>
|
|
372
|
-
</ul>
|
|
373
|
-
<hr>
|
|
374
|
-
<ul>
|
|
375
|
-
<li><p>pipe</p>
|
|
376
|
-
<p>执行从左向右的函数组合。</p>
|
|
377
|
-
<p>使用Array.reduce()与扩展运算符 (…) 执行从左向右的函数组合。第一个 (最左边的) 函数可以接受一个或多个参数;其余的函数必须是一元的。</p>
|
|
378
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">pipeFunctions</span> = (<span class="params">...fns</span>) => fns.<span class="title function_">reduce</span>(<span class="function">(<span class="params">f, g</span>) =></span> <span class="function">(<span class="params">...args</span>) =></span> <span class="title function_">g</span>(<span class="title function_">f</span>(...args)));</span><br><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment">const add5 = x => x + 5</span></span><br><span class="line"><span class="comment">const multiply = (x, y) => x * y</span></span><br><span class="line"><span class="comment">const multiplyAndAdd5 = pipeFunctions(multiply, add5)</span></span><br><span class="line"><span class="comment">multiplyAndAdd5(5, 2) -> 15</span></span><br><span class="line"><span class="comment">*/</span></span><br></pre></td></tr></table></figure></li>
|
|
379
|
-
</ul>
|
|
380
|
-
<hr>
|
|
381
|
-
<ul>
|
|
382
|
-
<li><p>promisify</p>
|
|
383
|
-
<p>转换异步函数以返回一个承诺。</p>
|
|
384
|
-
<p>使用讨好返回一个返回调用原始函数的Promise的函数。使用…rest运算符传入所有参数。<br>在节点 8 + 中, 可以使用 util.promisify</p>
|
|
385
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">promisify</span> = func =></span><br><span class="line"><span class="function">(<span class="params">...args</span>) =></span></span><br><span class="line"><span class="keyword">new</span> <span class="title class_">Promise</span>(<span class="function">(<span class="params">resolve, reject</span>) =></span></span><br><span class="line"> <span class="title function_">func</span>(...args, <span class="function">(<span class="params">err, result</span>) =></span></span><br><span class="line"> err ? <span class="title function_">reject</span>(err) : <span class="title function_">resolve</span>(result))</span><br><span class="line">);</span><br><span class="line"><span class="comment">// const delay = promisify((d, cb) => setTimeout(cb, d))</span></span><br><span class="line"><span class="comment">// delay(2000).then(() => console.log('Hi!')) -> Promise resolves after 2s</span></span><br></pre></td></tr></table></figure></li>
|
|
386
|
-
</ul>
|
|
387
|
-
<hr>
|
|
388
|
-
<ul>
|
|
389
|
-
<li><p>runPromisesInSeries</p>
|
|
390
|
-
<p>运行一系列的承诺系列。</p>
|
|
391
|
-
<p>使用Array.reduce()创建一个承诺链, 每个承诺在解决时返回下一个承诺。</p>
|
|
392
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">runPromisesInSeries</span> = ps => ps.<span class="title function_">reduce</span>(<span class="function">(<span class="params">p, next</span>) =></span> p.<span class="title function_">then</span>(next), <span class="title class_">Promise</span>.<span class="title function_">resolve</span>());</span><br><span class="line"><span class="comment">// const delay = (d) => new Promise(r => setTimeout(r, d))</span></span><br><span class="line"><span class="comment">// runPromisesInSeries([() => delay(1000), () => delay(2000)]) -> executes each promise sequentially, taking a total of 3 seconds to complete</span></span><br></pre></td></tr></table></figure></li>
|
|
393
|
-
</ul>
|
|
394
|
-
<hr>
|
|
395
|
-
<ul>
|
|
396
|
-
<li><p>sleep</p>
|
|
397
|
-
<p>延迟异步函数的执行。</p>
|
|
398
|
-
<p>延迟执行async函数的一部分, 将其放入休眠状态, 返回Promise.</p>
|
|
399
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">sleep</span> = ms => <span class="keyword">new</span> <span class="title class_">Promise</span>(<span class="function"><span class="params">resolve</span> =></span> <span class="built_in">setTimeout</span>(resolve, ms));</span><br><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment">async function sleepyWork() {</span></span><br><span class="line"><span class="comment"> console.log('I\'m going to sleep for 1 second.');</span></span><br><span class="line"><span class="comment"> await sleep(1000);</span></span><br><span class="line"><span class="comment"> console.log('I woke up after 1 second.');</span></span><br><span class="line"><span class="comment">}</span></span><br><span class="line"><span class="comment">*/</span></span><br></pre></td></tr></table></figure></li>
|
|
400
|
-
</ul>
|
|
401
|
-
<blockquote>
|
|
402
|
-
<h2 id="数学"><a href="#数学" class="headerlink" title="数学"></a>数学</h2></blockquote>
|
|
403
|
-
<ul>
|
|
404
|
-
<li><p>arrayAverage</p>
|
|
405
|
-
<p>返回数字数组的平均值。</p>
|
|
406
|
-
<p>使用Array.reduce()将每个值添加到累加器中, 并以0的值初始化, 除以数组的length。</p>
|
|
407
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">arrayAverage</span> = arr => arr.<span class="title function_">reduce</span>(<span class="function">(<span class="params">acc, val</span>) =></span> acc + val, <span class="number">0</span>) / arr.<span class="property">length</span>;</span><br><span class="line"><span class="comment">// arrayAverage([1,2,3]) -> 2</span></span><br></pre></td></tr></table></figure></li>
|
|
408
|
-
</ul>
|
|
409
|
-
<hr>
|
|
410
|
-
<ul>
|
|
411
|
-
<li><p>arraySum</p>
|
|
412
|
-
<p>返回一个数字数组的总和。</p>
|
|
413
|
-
<p>使用Array.reduce()将每个值添加到累加器中, 并以0值初始化.</p>
|
|
414
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">arraySum</span> = arr => arr.<span class="title function_">reduce</span>(<span class="function">(<span class="params">acc, val</span>) =></span> acc + val, <span class="number">0</span>);</span><br><span class="line"><span class="comment">// arraySum([1,2,3,4]) -> 10</span></span><br></pre></td></tr></table></figure></li>
|
|
415
|
-
</ul>
|
|
416
|
-
<hr>
|
|
417
|
-
<ul>
|
|
418
|
-
<li><p>collatz</p>
|
|
419
|
-
<p>应用 Collatz 算法。</p>
|
|
420
|
-
<p>如果n是偶数, 则返回n/2。否则返回3n+1.</p>
|
|
421
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">collatz</span> = n => (n % <span class="number">2</span> == <span class="number">0</span>) ? (n / <span class="number">2</span>) : (<span class="number">3</span> * n + <span class="number">1</span>);</span><br><span class="line"><span class="comment">// collatz(8) --> 4</span></span><br><span class="line"><span class="comment">// collatz(5) --> 16</span></span><br></pre></td></tr></table></figure></li>
|
|
422
|
-
</ul>
|
|
423
|
-
<hr>
|
|
424
|
-
<ul>
|
|
425
|
-
<li><p>collatz</p>
|
|
426
|
-
<p>将数字转换为数字数组。</p>
|
|
427
|
-
<p>将数字转换为字符串, 在 ES6 ([…string]) 中使用扩展运算符生成数组。使用Array.map()和parseInt()将每个值转换为整数。</p>
|
|
428
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">digitize</span> = n => [...<span class="string">''</span>+n].<span class="title function_">map</span>(<span class="function"><span class="params">i</span> =></span> <span class="built_in">parseInt</span>(i));</span><br><span class="line"><span class="comment">// digitize(2334) -> [2, 3, 3, 4]</span></span><br></pre></td></tr></table></figure></li>
|
|
429
|
-
</ul>
|
|
430
|
-
<hr>
|
|
431
|
-
<ul>
|
|
432
|
-
<li><p>digitize</p>
|
|
433
|
-
<p>返回两点之间的距离。</p>
|
|
434
|
-
<p>使用Math.hypot()计算两个点之间的欧氏距离。</p>
|
|
435
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">distance</span> = (<span class="params">x0, y0, x1, y1</span>) => <span class="title class_">Math</span>.<span class="title function_">hypot</span>(x1 - x0, y1 - y0);</span><br><span class="line"><span class="comment">// distance(1,1, 2,3) -> 2.23606797749979</span></span><br></pre></td></tr></table></figure></li>
|
|
436
|
-
</ul>
|
|
437
|
-
<hr>
|
|
438
|
-
<ul>
|
|
439
|
-
<li><p>distance</p>
|
|
440
|
-
<p>计算数字的阶乘。</p>
|
|
441
|
-
<p>使用递归。如果n小于或等于1, 则返回1。否则, 返回n的乘积和n - 1的阶乘。如果n为负数, 则引发异常。</p>
|
|
442
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">factorial</span> = n =></span><br><span class="line">n < <span class="number">0</span> ? (<span class="function">() =></span> { <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">TypeError</span>(<span class="string">'Negative numbers are not allowed!'</span>) })()</span><br><span class="line">: n <= <span class="number">1</span> ? <span class="number">1</span> : n * <span class="title function_">factorial</span>(n - <span class="number">1</span>);</span><br><span class="line"><span class="comment">// factorial(6) -> 720</span></span><br></pre></td></tr></table></figure></li>
|
|
443
|
-
</ul>
|
|
444
|
-
<hr>
|
|
445
|
-
<ul>
|
|
446
|
-
<li><p>fibonacci</p>
|
|
447
|
-
<p>生成一个数组, 包含斐波那契数列, 直到第 n 个项。</p>
|
|
448
|
-
<p>创建一个指定长度的空数组, 初始化前两个值 (0和1)。使用Array.reduce()可将值添加到数组中, 方法是使用前两个值的总和, 但前两个数值除外。</p>
|
|
449
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">fibonacci</span> = n =></span><br><span class="line"><span class="title class_">Array</span>(n).<span class="title function_">fill</span>(<span class="number">0</span>).<span class="title function_">reduce</span>(<span class="function">(<span class="params">acc, val, i</span>) =></span> acc.<span class="title function_">concat</span>(i > <span class="number">1</span> ? acc[i - <span class="number">1</span>] + acc[i - <span class="number">2</span>] : i), []);</span><br><span class="line"><span class="comment">// fibonacci(5) -> [0,1,1,2,3]</span></span><br></pre></td></tr></table></figure></li>
|
|
450
|
-
</ul>
|
|
451
|
-
<hr>
|
|
452
|
-
<ul>
|
|
453
|
-
<li><p>gcd</p>
|
|
454
|
-
<p>计算两个数字之间最大的公共除数。</p>
|
|
455
|
-
<p>使用递归。基本情况是当y等于0时。在这种情况下, 返回x。否则, 返回y的 GCD 和除法的其余部分x/y.</p>
|
|
456
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">gcd</span> = (<span class="params">x, y</span>) => !y ? x : <span class="title function_">gcd</span>(y, x % y);</span><br><span class="line"><span class="comment">// gcd (8, 36) -> 4</span></span><br></pre></td></tr></table></figure></li>
|
|
457
|
-
</ul>
|
|
458
|
-
<hr>
|
|
459
|
-
<ul>
|
|
460
|
-
<li><p>hammingDistance</p>
|
|
461
|
-
<p>计算两个值之间的汉明距离。</p>
|
|
462
|
-
<p>使用 XOR 运算符 (^) 可查找两个数字之间的位差, 使用toString(2)转换为二进制字符串。使用match(/1/g)计算并返回字符串中1的数目。.</p>
|
|
463
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">hammingDistance</span> = (<span class="params">num1, num2</span>) =></span><br><span class="line"> ((num1 ^ num2).<span class="title function_">toString</span>(<span class="number">2</span>).<span class="title function_">match</span>(<span class="regexp">/1/g</span>) || <span class="string">''</span>).<span class="property">length</span>;</span><br><span class="line"><span class="comment">// hammingDistance(2,3) -> 1</span></span><br></pre></td></tr></table></figure></li>
|
|
464
|
-
</ul>
|
|
465
|
-
<hr>
|
|
466
|
-
<ul>
|
|
467
|
-
<li><p>isDivisible</p>
|
|
468
|
-
<p>检查第一个数值参数是否可被另一个数字变量整除。</p>
|
|
469
|
-
<p>使用模数运算符 (%) 检查余数是否等于0.</p>
|
|
470
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">isDivisible</span> = (<span class="params">dividend, divisor</span>) => dividend % divisor === <span class="number">0</span>;</span><br><span class="line"><span class="comment">// isDivisible(6,3) -> true</span></span><br></pre></td></tr></table></figure></li>
|
|
471
|
-
</ul>
|
|
472
|
-
<hr>
|
|
473
|
-
<ul>
|
|
474
|
-
<li><p>iseven</p>
|
|
475
|
-
<p>如果给定的数字为偶数, 则返回true , 否则为false 。</p>
|
|
476
|
-
<p>检查一个数字是奇数还是使用模数 (%) 运算符。如果数字为偶数, 则返回true , 如果数字为奇数, 则为false 。</p>
|
|
477
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">isEven</span> = num => num % <span class="number">2</span> === <span class="number">0</span>;</span><br><span class="line"><span class="comment">// isEven(3) -> false</span></span><br></pre></td></tr></table></figure></li>
|
|
478
|
-
</ul>
|
|
479
|
-
<hr>
|
|
480
|
-
<ul>
|
|
481
|
-
<li><p>lcm</p>
|
|
482
|
-
<p>返回两个数字中最不常见的倍数。</p>
|
|
483
|
-
<p>使用最大的公共除数 (GCD) 公式和Math.abs()来确定最不常见的倍数。GCD 公式使用递归。</p>
|
|
484
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">lcm</span> = (<span class="params">x,y</span>) => {</span><br><span class="line"> <span class="keyword">const</span> <span class="title function_">gcd</span> = (<span class="params">x, y</span>) => !y ? x : <span class="title function_">gcd</span>(y, x % y);</span><br><span class="line"> <span class="keyword">return</span> <span class="title class_">Math</span>.<span class="title function_">abs</span>(x*y)/(<span class="title function_">gcd</span>(x,y));</span><br><span class="line">};</span><br><span class="line"><span class="comment">// lcm(12,7) -> 84</span></span><br></pre></td></tr></table></figure></li>
|
|
485
|
-
</ul>
|
|
486
|
-
<hr>
|
|
487
|
-
<ul>
|
|
488
|
-
<li><p>median</p>
|
|
489
|
-
<p>返回数字数组的中间值。</p>
|
|
490
|
-
<p>找到数组的中间, 使用Array.sort()来对值进行排序。如果length为奇数, 则返回中点的数字, 否则为两个中间数的平均值。</p>
|
|
491
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">median</span> = arr => {</span><br><span class="line"> <span class="keyword">const</span> mid = <span class="title class_">Math</span>.<span class="title function_">floor</span>(arr.<span class="property">length</span> / <span class="number">2</span>), nums = arr.<span class="title function_">sort</span>(<span class="function">(<span class="params">a, b</span>) =></span> a - b);</span><br><span class="line"> <span class="keyword">return</span> arr.<span class="property">length</span> % <span class="number">2</span> !== <span class="number">0</span> ? nums[mid] : (nums[mid - <span class="number">1</span>] + nums[mid]) / <span class="number">2</span>;</span><br><span class="line">};</span><br><span class="line"><span class="comment">// median([5,6,50,1,-5]) -> 5</span></span><br><span class="line"><span class="comment">// median([0,10,-2,7]) -> 3.5</span></span><br></pre></td></tr></table></figure></li>
|
|
492
|
-
</ul>
|
|
493
|
-
<hr>
|
|
494
|
-
<ul>
|
|
495
|
-
<li><p>palindrome</p>
|
|
496
|
-
<p>如果给定字符串为回文, 则返回true , 否则为false 。</p>
|
|
497
|
-
<p>转换字符串toLowerCase()并使用replace()从其中删除非字母数字字符。然后,split(‘’)到各个字符,reverse(), join(‘’) , 并将其与原始的、不可逆转的字符串进行比较, 然后将其转换为tolowerCase().</p>
|
|
498
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">palindrome</span> = str => {</span><br><span class="line"> <span class="keyword">const</span> s = str.<span class="title function_">toLowerCase</span>().<span class="title function_">replace</span>(<span class="regexp">/[\W_]/g</span>,<span class="string">''</span>);</span><br><span class="line"> <span class="keyword">return</span> s === s.<span class="title function_">split</span>(<span class="string">''</span>).<span class="title function_">reverse</span>().<span class="title function_">join</span>(<span class="string">''</span>);</span><br><span class="line">}</span><br><span class="line"><span class="comment">// palindrome('taco cat') -> true</span></span><br></pre></td></tr></table></figure></li>
|
|
499
|
-
</ul>
|
|
500
|
-
<hr>
|
|
501
|
-
<ul>
|
|
502
|
-
<li><p>percentile</p>
|
|
503
|
-
<p>使用百分比公式计算给定数组中有多少个数小于或等于给定值。</p>
|
|
504
|
-
<p>使用Array.reduce()计算值的下面有多少, 有多少个数是相同的值, 并应用百分比公式。</p>
|
|
505
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">percentile</span> = (<span class="params">arr, val</span>) =></span><br><span class="line"> <span class="number">100</span> * arr.<span class="title function_">reduce</span>(<span class="function">(<span class="params">acc,v</span>) =></span> acc + (v < val ? <span class="number">1</span> : <span class="number">0</span>) + (v === val ? <span class="number">0.5</span> : <span class="number">0</span>), <span class="number">0</span>) / arr.<span class="property">length</span>;</span><br><span class="line"><span class="comment">// percentile([1,2,3,4,5,6,7,8,9,10], 6) -> 55</span></span><br></pre></td></tr></table></figure></li>
|
|
506
|
-
</ul>
|
|
507
|
-
<hr>
|
|
508
|
-
<ul>
|
|
509
|
-
<li><p>powerset</p>
|
|
510
|
-
<p>返回给定数字数组的 powerset。</p>
|
|
511
|
-
<p>使用Array.reduce()与Array.map()组合, 以循环访问元素并将其合并到包含所有组合的数组中。</p>
|
|
512
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">powerset</span> = arr =></span><br><span class="line"> arr.<span class="title function_">reduce</span>(<span class="function">(<span class="params">a, v</span>) =></span> a.<span class="title function_">concat</span>(a.<span class="title function_">map</span>(<span class="function"><span class="params">r</span> =></span> [v].<span class="title function_">concat</span>(r))), [[]]);</span><br><span class="line"><span class="comment">// powerset([1,2]) -> [[], [1], [2], [2,1]]</span></span><br></pre></td></tr></table></figure></li>
|
|
513
|
-
</ul>
|
|
514
|
-
<hr>
|
|
515
|
-
<ul>
|
|
516
|
-
<li><p>randomIntegerInRange</p>
|
|
517
|
-
<p>返回指定范围内的随机整数。</p>
|
|
518
|
-
<p>使用Math.random()生成一个随机数并将其映射到所需的范围, 使用Math.floor()使其成为整数。</p>
|
|
519
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">randomIntegerInRange</span> = (<span class="params">min, max</span>) => <span class="title class_">Math</span>.<span class="title function_">floor</span>(<span class="title class_">Math</span>.<span class="title function_">random</span>() * (max - min + <span class="number">1</span>)) + min;</span><br><span class="line"><span class="comment">// randomIntegerInRange(0, 5) -> 2</span></span><br></pre></td></tr></table></figure></li>
|
|
520
|
-
</ul>
|
|
521
|
-
<hr>
|
|
522
|
-
<ul>
|
|
523
|
-
<li><p>randomNumberInRange</p>
|
|
524
|
-
<p>返回指定范围内的随机数。</p>
|
|
525
|
-
<p>使用Math.random()生成随机值, 并使用乘法将其映射到所需的范围。</p>
|
|
526
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">randomNumberInRange</span> = (<span class="params">min, max</span>) => <span class="title class_">Math</span>.<span class="title function_">random</span>() * (max - min) + min;</span><br><span class="line"><span class="comment">// randomNumberInRange(2,10) -> 6.0211363285087005</span></span><br></pre></td></tr></table></figure></li>
|
|
527
|
-
</ul>
|
|
528
|
-
<hr>
|
|
529
|
-
<ul>
|
|
530
|
-
<li><p>round</p>
|
|
531
|
-
<p>将数字四舍五入到指定的位数。</p>
|
|
532
|
-
<p>使用Math.round()和模板文本将数字舍入到指定的位数。省略第二个参数,decimals舍入为整数。</p>
|
|
533
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">round</span> = (<span class="params">n, decimals=<span class="number">0</span></span>) => <span class="title class_">Number</span>(<span class="string">`<span class="subst">${<span class="built_in">Math</span>.round(<span class="string">`<span class="subst">${n}</span>e<span class="subst">${decimals}</span>`</span>)}</span>e-<span class="subst">${decimals}</span>`</span>);</span><br><span class="line"><span class="comment">// round(1.005, 2) -> 1.01</span></span><br></pre></td></tr></table></figure></li>
|
|
534
|
-
</ul>
|
|
535
|
-
<hr>
|
|
536
|
-
<ul>
|
|
537
|
-
<li><p>standardDeviation</p>
|
|
538
|
-
<p>返回数字数组的标准偏差。</p>
|
|
539
|
-
<p>使用Array.reduce()计算值的平均值、方差和方差的总和, 值的方差, 然后确定标准偏差。可以省略第二个参数以获取样本标准偏差, 或将其设置为true以获取总体标准偏差。</p>
|
|
540
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">standardDeviation</span> = (<span class="params">arr, usePopulation = <span class="literal">false</span></span>) => {</span><br><span class="line"> <span class="keyword">const</span> mean = arr.<span class="title function_">reduce</span>(<span class="function">(<span class="params">acc, val</span>) =></span> acc + val, <span class="number">0</span>) / arr.<span class="property">length</span>;</span><br><span class="line"> <span class="keyword">return</span> <span class="title class_">Math</span>.<span class="title function_">sqrt</span>(</span><br><span class="line"> arr.<span class="title function_">reduce</span>(<span class="function">(<span class="params">acc, val</span>) =></span> acc.<span class="title function_">concat</span>(<span class="title class_">Math</span>.<span class="title function_">pow</span>(val - mean, <span class="number">2</span>)), [])</span><br><span class="line"> .<span class="title function_">reduce</span>(<span class="function">(<span class="params">acc, val</span>) =></span> acc + val, <span class="number">0</span>) / (arr.<span class="property">length</span> - (usePopulation ? <span class="number">0</span> : <span class="number">1</span>))</span><br><span class="line"> );</span><br><span class="line">};</span><br><span class="line"><span class="comment">// standardDeviation([10,2,38,23,38,23,21]) -> 13.284434142114991 (sample)</span></span><br><span class="line"><span class="comment">// standardDeviation([10,2,38,23,38,23,21], true) -> 12.29899614287479 (population)</span></span><br></pre></td></tr></table></figure></li>
|
|
541
|
-
</ul>
|
|
542
|
-
<blockquote>
|
|
543
|
-
<h2 id="媒体"><a href="#媒体" class="headerlink" title="媒体"></a>媒体</h2></blockquote>
|
|
544
|
-
<ul>
|
|
545
|
-
<li><p>speechSynthesis</p>
|
|
546
|
-
<p>执行语音合成 (实验)。</p>
|
|
547
|
-
<p>使用SpeechSynthesisUtterance.voice和window.speechSynthesis.getVoices()将邮件转换为语音。使用window.speechSynthesis.speak()播放该消息。<br>了解有关web 语音 API 的 SpeechSynthesisUtterance 接口的详细信息.</p>
|
|
548
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">speechSynthesis</span> = message => {</span><br><span class="line"> <span class="keyword">const</span> msg = <span class="keyword">new</span> <span class="title class_">SpeechSynthesisUtterance</span>(message);</span><br><span class="line"> msg.<span class="property">voice</span> = <span class="variable language_">window</span>.<span class="property">speechSynthesis</span>.<span class="title function_">getVoices</span>()[<span class="number">0</span>];</span><br><span class="line"> <span class="variable language_">window</span>.<span class="property">speechSynthesis</span>.<span class="title function_">speak</span>(msg);</span><br><span class="line">};</span><br><span class="line"><span class="comment">// speechSynthesis('Hello, World') -> plays the message</span></span><br></pre></td></tr></table></figure></li>
|
|
549
|
-
</ul>
|
|
550
|
-
<blockquote>
|
|
551
|
-
<h2 id="节点"><a href="#节点" class="headerlink" title="节点"></a>节点</h2></blockquote>
|
|
552
|
-
<ul>
|
|
553
|
-
<li><p>JSONToFile</p>
|
|
554
|
-
<p>将 JSON 对象写入文件。</p>
|
|
555
|
-
<p>使用fs.writeFile()、模板文本和JSON.stringify()将json对象写入.json文件。</p>
|
|
556
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> fs = <span class="built_in">require</span>(<span class="string">'fs'</span>);</span><br><span class="line"><span class="keyword">const</span> <span class="title function_">JSONToFile</span> = (<span class="params">obj, filename</span>) => fs.<span class="title function_">writeFile</span>(<span class="string">`<span class="subst">${filename}</span>.json`</span>, <span class="title class_">JSON</span>.<span class="title function_">stringify</span>(obj, <span class="literal">null</span>, <span class="number">2</span>))</span><br><span class="line"><span class="comment">// JSONToFile({test: "is passed"}, 'testJsonFile') -> writes the object to 'testJsonFile.json'</span></span><br></pre></td></tr></table></figure></li>
|
|
557
|
-
</ul>
|
|
558
|
-
<hr>
|
|
559
|
-
<ul>
|
|
560
|
-
<li><p>readFileLines</p>
|
|
561
|
-
<p>返回指定文件中的行的数组。</p>
|
|
562
|
-
<p>在fs节点包中使用readFileSync函数可以从文件创建Buffer。使用toString(encoding)函数将缓冲区转换为字符串。通过spliting 文件内容行从文件内容创建数组 (每个\n).</p>
|
|
563
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> fs = <span class="built_in">require</span>(<span class="string">'fs'</span>);</span><br><span class="line"><span class="keyword">const</span> <span class="title function_">readFileLines</span> = filename => fs.<span class="title function_">readFileSync</span>(filename).<span class="title function_">toString</span>(<span class="string">'UTF8'</span>).<span class="title function_">split</span>(<span class="string">'\n'</span>);</span><br><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment">contents of test.txt :</span></span><br><span class="line"><span class="comment"> line1</span></span><br><span class="line"><span class="comment"> line2</span></span><br><span class="line"><span class="comment"> line3</span></span><br><span class="line"><span class="comment"> ___________________________</span></span><br><span class="line"><span class="comment">let arr = readFileLines('test.txt')</span></span><br><span class="line"><span class="comment">console.log(arr) // -> ['line1', 'line2', 'line3']</span></span><br><span class="line"><span class="comment">*/</span></span><br></pre></td></tr></table></figure></li>
|
|
564
|
-
</ul>
|
|
565
|
-
<blockquote>
|
|
566
|
-
<h2 id="对象"><a href="#对象" class="headerlink" title="对象"></a>对象</h2></blockquote>
|
|
567
|
-
<ul>
|
|
568
|
-
<li><p>cleanObj</p>
|
|
569
|
-
<p>移除从 JSON 对象指定的属性之外的任何特性。</p>
|
|
570
|
-
<p>使用Object.keys()方法可以遍历给定的 json 对象并删除在给定数组中不是included 的键。另外, 如果给它一个特殊的键 (childIndicator), 它将在里面深入搜索, 并将函数应用于内部对象。</p>
|
|
571
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">cleanObj</span> = (<span class="params">obj, keysToKeep = [], childIndicator</span>) => {</span><br><span class="line"> <span class="title class_">Object</span>.<span class="title function_">keys</span>(obj).<span class="title function_">forEach</span>(<span class="function"><span class="params">key</span> =></span> {</span><br><span class="line"> <span class="keyword">if</span> (key === childIndicator) {</span><br><span class="line"> <span class="title function_">cleanObj</span>(obj[key], keysToKeep, childIndicator);</span><br><span class="line"> } <span class="keyword">else</span> <span class="keyword">if</span> (!keysToKeep.<span class="title function_">includes</span>(key)) {</span><br><span class="line"> <span class="keyword">delete</span> obj[key];</span><br><span class="line"> }</span><br><span class="line"> })</span><br><span class="line">}</span><br><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment"> const testObj = {a: 1, b: 2, children: {a: 1, b: 2} }</span></span><br><span class="line"><span class="comment"> cleanObj(testObj, ["a"],"children")</span></span><br><span class="line"><span class="comment"> console.log(testObj)// { a: 1, children : { a: 1} }</span></span><br><span class="line"><span class="comment">*/</span></span><br></pre></td></tr></table></figure></li>
|
|
572
|
-
</ul>
|
|
573
|
-
<hr>
|
|
574
|
-
<ul>
|
|
575
|
-
<li><p>objectFromPairs</p>
|
|
576
|
-
<p>从给定的键值对创建对象。</p>
|
|
577
|
-
<p>使用Array.reduce()创建和组合键值对。</p>
|
|
578
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">objectFromPairs</span> = arr => arr.<span class="title function_">reduce</span>(<span class="function">(<span class="params">a, v</span>) =></span> (a[v[<span class="number">0</span>]] = v[<span class="number">1</span>], a), {});</span><br><span class="line"><span class="comment">// objectFromPairs([['a',1],['b',2]]) -> {a: 1, b: 2}</span></span><br></pre></td></tr></table></figure></li>
|
|
579
|
-
</ul>
|
|
580
|
-
<hr>
|
|
581
|
-
<ul>
|
|
582
|
-
<li><p>objectToPairs</p>
|
|
583
|
-
<p>从对象创建键值对数组的数组。</p>
|
|
584
|
-
<p>使用Object.keys()和Array.map()循环访问对象的键并生成具有键值对的数组。</p>
|
|
585
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">objectToPairs</span> = obj => <span class="title class_">Object</span>.<span class="title function_">keys</span>(obj).<span class="title function_">map</span>(<span class="function"><span class="params">k</span> =></span> [k, obj[k]]);</span><br><span class="line"><span class="comment">// objectToPairs({a: 1, b: 2}) -> [['a',1],['b',2]])</span></span><br></pre></td></tr></table></figure></li>
|
|
586
|
-
</ul>
|
|
587
|
-
<hr>
|
|
588
|
-
<ul>
|
|
589
|
-
<li><p>shallowClone</p>
|
|
590
|
-
<p>创建对象的浅表克隆。</p>
|
|
591
|
-
<p>使用Object.assign()和一个空对象 ({}) 创建原始的浅克隆。</p>
|
|
592
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">shallowClone</span> = obj => <span class="title class_">Object</span>.<span class="title function_">assign</span>({}, obj);</span><br><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment">const a = { x: true, y: 1 };</span></span><br><span class="line"><span class="comment">const b = shallowClone(a);</span></span><br><span class="line"><span class="comment">a === b -> false</span></span><br><span class="line"><span class="comment">*/</span></span><br></pre></td></tr></table></figure></li>
|
|
593
|
-
</ul>
|
|
594
|
-
<hr>
|
|
595
|
-
<ul>
|
|
596
|
-
<li><p>truthCheckCollection</p>
|
|
597
|
-
<p>检查谓词 (第二个参数) 是否 truthy 集合的所有元素 (第一个参数)。</p>
|
|
598
|
-
<p>使用Array.every()检查每个传递的对象是否具有指定的属性, 以及是否返回 truthy 值。</p>
|
|
599
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">truthCheckCollection = <span class="function">(<span class="params">collection, pre</span>) =></span> (collection.<span class="title function_">every</span>(<span class="function"><span class="params">obj</span> =></span> obj[pre]));</span><br><span class="line"><span class="comment">// truthCheckCollection([{"user": "Tinky-Winky", "sex": "male"}, {"user": "Dipsy", "sex": "male"}], "sex") -> true</span></span><br></pre></td></tr></table></figure></li>
|
|
600
|
-
</ul>
|
|
601
|
-
<blockquote>
|
|
602
|
-
<h2 id="字符串"><a href="#字符串" class="headerlink" title="字符串"></a>字符串</h2></blockquote>
|
|
603
|
-
<ul>
|
|
604
|
-
<li><p>anagrams</p>
|
|
605
|
-
<p>生成字符串的所有字谜 (包含重复项)。</p>
|
|
606
|
-
<p>使用递归。对于给定字符串中的每个字母, 为其其余字母创建所有部分字谜。使用Array.map()将字母与每个部分变位词组合在一起, 然后将Array.reduce()组合在一个数组中的所有字谜。基本情况为字符串length等于2或1.</p>
|
|
607
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">anagrams</span> = str => {</span><br><span class="line"> <span class="keyword">if</span> (str.<span class="property">length</span> <= <span class="number">2</span>) <span class="keyword">return</span> str.<span class="property">length</span> === <span class="number">2</span> ? [str, str[<span class="number">1</span>] + str[<span class="number">0</span>]] : [str];</span><br><span class="line"> <span class="keyword">return</span> str</span><br><span class="line"> .<span class="title function_">split</span>(<span class="string">''</span>)</span><br><span class="line"> .<span class="title function_">reduce</span>(<span class="function">(<span class="params">acc, letter, i</span>) =></span></span><br><span class="line"> acc.<span class="title function_">concat</span>(<span class="title function_">anagrams</span>(str.<span class="title function_">slice</span>(<span class="number">0</span>, i) + str.<span class="title function_">slice</span>(i + <span class="number">1</span>)).<span class="title function_">map</span>(<span class="function"><span class="params">val</span> =></span> letter + val)), []);</span><br><span class="line"> };</span><br><span class="line"><span class="comment">// anagrams('abc') -> ['abc','acb','bac','bca','cab','cba']</span></span><br></pre></td></tr></table></figure></li>
|
|
608
|
-
</ul>
|
|
609
|
-
<hr>
|
|
610
|
-
<ul>
|
|
611
|
-
<li><p>Capitalize</p>
|
|
612
|
-
<p>将字符串的第一个字母大写。</p>
|
|
613
|
-
<p>使用 destructuring 和toUpperCase()可将第一个字母、 …rest用于获取第一个字母之后的字符数组, 然后是Array.join(‘’)以使其成为字符串。省略lowerRest参数以保持字符串的其余部分不变, 或将其设置为true以转换为小写。</p>
|
|
614
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">capitalize</span> = (<span class="params">[first,...rest], lowerRest = <span class="literal">false</span></span>) =></span><br><span class="line"> first.<span class="title function_">toUpperCase</span>() + (lowerRest ? rest.<span class="title function_">join</span>(<span class="string">''</span>).<span class="title function_">toLowerCase</span>() : rest.<span class="title function_">join</span>(<span class="string">''</span>));</span><br><span class="line"><span class="comment">// capitalize('myName') -> 'MyName'</span></span><br><span class="line"><span class="comment">// capitalize('myName', true) -> 'Myname'</span></span><br></pre></td></tr></table></figure></li>
|
|
615
|
-
</ul>
|
|
616
|
-
<hr>
|
|
617
|
-
<ul>
|
|
618
|
-
<li><p>capitalizeEveryWord</p>
|
|
619
|
-
<p>将字符串中每个单词的首字母大写。</p>
|
|
620
|
-
<p>使用replace()匹配每个单词和toUpperCase()的第一个字符以将其大写。</p>
|
|
621
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">capitalizeEveryWord</span> = str => str.<span class="title function_">replace</span>(<span class="regexp">/\b[a-z]/g</span>, <span class="function"><span class="params">char</span> =></span> char.<span class="title function_">toUpperCase</span>());</span><br><span class="line"><span class="comment">// capitalizeEveryWord('hello world!') -> 'Hello World!'</span></span><br></pre></td></tr></table></figure></li>
|
|
622
|
-
</ul>
|
|
623
|
-
<hr>
|
|
624
|
-
<ul>
|
|
625
|
-
<li><p>escapeRegExp</p>
|
|
626
|
-
<p>转义要在正则表达式中使用的字符串。</p>
|
|
627
|
-
<p>使用replace()可转义特殊字符。</p>
|
|
628
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">escapeRegExp</span> = str => str.<span class="title function_">replace</span>(<span class="regexp">/[.*+?^${}()|[\]\\]/g</span>, <span class="string">'\\$&'</span>);</span><br><span class="line"><span class="comment">// escapeRegExp('(test)') -> \\(test\\)</span></span><br></pre></td></tr></table></figure></li>
|
|
629
|
-
</ul>
|
|
630
|
-
<hr>
|
|
631
|
-
<ul>
|
|
632
|
-
<li><p>fromCamelCase</p>
|
|
633
|
-
<p>从匹配转换字符串。</p>
|
|
634
|
-
<p>使用replace()可删除下划线、连字符和空格, 并将单词转换为匹配。省略第二个参数以使用默认分隔符_.</p>
|
|
635
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">fromCamelCase</span> = (<span class="params">str, separator = <span class="string">'_'</span></span>) =></span><br><span class="line">str.<span class="title function_">replace</span>(<span class="regexp">/([a-z\d])([A-Z])/g</span>, <span class="string">'$1'</span> + separator + <span class="string">'$2'</span>)</span><br><span class="line"> .<span class="title function_">replace</span>(<span class="regexp">/([A-Z]+)([A-Z][a-z\d]+)/g</span>, <span class="string">'$1'</span> + separator + <span class="string">'$2'</span>).<span class="title function_">toLowerCase</span>();</span><br><span class="line"><span class="comment">// fromCamelCase('someDatabaseFieldName', ' ') -> 'some database field name'</span></span><br><span class="line"><span class="comment">// fromCamelCase('someLabelThatNeedsToBeCamelized', '-') -> 'some-label-that-needs-to-be-camelized'</span></span><br><span class="line"><span class="comment">// fromCamelCase('someJavascriptProperty', '_') -> 'some_javascript_property'</span></span><br></pre></td></tr></table></figure></li>
|
|
636
|
-
</ul>
|
|
637
|
-
<hr>
|
|
638
|
-
<ul>
|
|
639
|
-
<li><p>reverseString</p>
|
|
640
|
-
<p>反转字符串。</p>
|
|
641
|
-
<p>使用数组 destructuring 和Array.reverse()可反转字符串中字符的顺序。使用join(‘’)组合字符以获取字符串.</p>
|
|
642
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">reverseString</span> = str => [...str].<span class="title function_">reverse</span>().<span class="title function_">join</span>(<span class="string">''</span>);</span><br><span class="line"><span class="comment">// reverseString('foobar') -> 'raboof'</span></span><br></pre></td></tr></table></figure></li>
|
|
643
|
-
</ul>
|
|
644
|
-
<hr>
|
|
645
|
-
<ul>
|
|
646
|
-
<li><p>sortCharactersInString</p>
|
|
647
|
-
<p>按字母顺序对字符串中的字符进行排序。</p>
|
|
648
|
-
<p>使用split(‘’)、Array.sort()利用localeCompare()重新组合使用join(‘’).</p>
|
|
649
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">sortCharactersInString</span> = str =></span><br><span class="line"> str.<span class="title function_">split</span>(<span class="string">''</span>).<span class="title function_">sort</span>(<span class="function">(<span class="params">a, b</span>) =></span> a.<span class="title function_">localeCompare</span>(b)).<span class="title function_">join</span>(<span class="string">''</span>);</span><br><span class="line"><span class="comment">// sortCharactersInString('cabbage') -> 'aabbceg'</span></span><br></pre></td></tr></table></figure></li>
|
|
650
|
-
</ul>
|
|
651
|
-
<hr>
|
|
652
|
-
<ul>
|
|
653
|
-
<li><p>toCamelCase</p>
|
|
654
|
-
<p>将字符串转换为匹配。</p>
|
|
655
|
-
<p>使用replace()可删除下划线、连字符和空格, 并将单词转换为匹配。</p>
|
|
656
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">toCamelCase</span> = str =></span><br><span class="line"> str.<span class="title function_">replace</span>(<span class="regexp">/^([A-Z])|[\s-_]+(\w)/g</span>, <span class="function">(<span class="params">match, p1, p2, offset</span>) =></span> p2 ? p2.<span class="title function_">toUpperCase</span>() : p1.<span class="title function_">toLowerCase</span>());</span><br><span class="line"><span class="comment">// toCamelCase("some_database_field_name") -> 'someDatabaseFieldName'</span></span><br><span class="line"><span class="comment">// toCamelCase("Some label that needs to be camelized") -> 'someLabelThatNeedsToBeCamelized'</span></span><br><span class="line"><span class="comment">// toCamelCase("some-javascript-property") -> 'someJavascriptProperty'</span></span><br><span class="line"><span class="comment">// toCamelCase("some-mixed_string with spaces_underscores-and-hyphens") -> 'someMixedStringWithSpacesUnderscoresAndHyphens'</span></span><br></pre></td></tr></table></figure></li>
|
|
657
|
-
</ul>
|
|
658
|
-
<hr>
|
|
659
|
-
<ul>
|
|
660
|
-
<li><p>truncateString</p>
|
|
661
|
-
<p>将字符串截断为指定长度。</p>
|
|
662
|
-
<p>确定字符串的length是否大于num。将截断的字符串返回到所需的长度, 并将…追加到末尾或原始字符串。</p>
|
|
663
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">truncateString</span> = (<span class="params">str, num</span>) =></span><br><span class="line"> str.<span class="property">length</span> > num ? str.<span class="title function_">slice</span>(<span class="number">0</span>, num > <span class="number">3</span> ? num - <span class="number">3</span> : num) + <span class="string">'...'</span> : str;</span><br><span class="line"><span class="comment">// truncateString('boomerang', 7) -> 'boom...'</span></span><br></pre></td></tr></table></figure></li>
|
|
664
|
-
</ul>
|
|
665
|
-
<blockquote>
|
|
666
|
-
<h2 id="实用"><a href="#实用" class="headerlink" title="实用"></a>实用</h2></blockquote>
|
|
667
|
-
<ul>
|
|
668
|
-
<li><p>coalesce</p>
|
|
669
|
-
<p>返回第一个非空/未定义参数。</p>
|
|
670
|
-
<p>使用Array.find()返回第一个非null/undefined的参数。</p>
|
|
671
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">coalesce</span> = (<span class="params">...args</span>) => args.<span class="title function_">find</span>(<span class="function"><span class="params">_</span> =></span> ![<span class="literal">undefined</span>, <span class="literal">null</span>].<span class="title function_">includes</span>(_))</span><br><span class="line"><span class="comment">// coalesce(null,undefined,"",NaN, "Waldo") -> ""</span></span><br></pre></td></tr></table></figure></li>
|
|
672
|
-
</ul>
|
|
673
|
-
<hr>
|
|
674
|
-
<ul>
|
|
675
|
-
<li><p>coalesceFactory</p>
|
|
676
|
-
<p>返回自定义的联合函数, 返回从提供的参数验证函数返回true的第一个参数。</p>
|
|
677
|
-
<p>使用Array.find()返回从提供的参数验证函数返回true的第一个参数。</p>
|
|
678
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">coalesceFactory</span> = valid => <span class="function">(<span class="params">...args</span>) =></span> args.<span class="title function_">find</span>(valid);</span><br><span class="line"><span class="comment">// const customCoalesce = coalesceFactory(_ => ![null, undefined, "", NaN].includes(_))</span></span><br><span class="line"><span class="comment">// customCoalesce(undefined, null, NaN, "", "Waldo") //-> "Waldo"</span></span><br></pre></td></tr></table></figure></li>
|
|
679
|
-
</ul>
|
|
680
|
-
<hr>
|
|
681
|
-
<ul>
|
|
682
|
-
<li><p>extendHex</p>
|
|
683
|
-
<p>将3位色码扩展为6位色码。</p>
|
|
684
|
-
<p>使用Array.map()、split()和Array.join()来加入映射数组, 将3位的 RGB notated 十六进制 color-code 转换为6位数字形式。Array.slice()用于从字符串启动中删除# , 因为它添加了一次。</p>
|
|
685
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">extendHex</span> = shortHex =></span><br><span class="line"> <span class="string">'#'</span> + shortHex.<span class="title function_">slice</span>(shortHex.<span class="title function_">startsWith</span>(<span class="string">'#'</span>) ? <span class="number">1</span> : <span class="number">0</span>).<span class="title function_">split</span>(<span class="string">''</span>).<span class="title function_">map</span>(<span class="function"><span class="params">x</span> =></span> x+x).<span class="title function_">join</span>(<span class="string">''</span>)</span><br><span class="line"><span class="comment">// extendHex('#03f') -> '#0033ff'</span></span><br><span class="line"><span class="comment">// extendHex('05a') -> '#0055aa'</span></span><br></pre></td></tr></table></figure></li>
|
|
686
|
-
</ul>
|
|
687
|
-
<hr>
|
|
688
|
-
<ul>
|
|
689
|
-
<li><p>gettype</p>
|
|
690
|
-
<p>返回值的本机类型。</p>
|
|
691
|
-
<p>如果值未定义或为 null, 则返回小写的构造函数名称、”未定义” 或 “null”</p>
|
|
692
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">getType</span> = v =></span><br><span class="line"> v === <span class="literal">undefined</span> ? <span class="string">'undefined'</span> : v === <span class="literal">null</span> ? <span class="string">'null'</span> : v.<span class="property">constructor</span>.<span class="property">name</span>.<span class="title function_">toLowerCase</span>();</span><br><span class="line"><span class="comment">// getType(new Set([1,2,3])) -> "set"</span></span><br></pre></td></tr></table></figure></li>
|
|
693
|
-
</ul>
|
|
694
|
-
<hr>
|
|
695
|
-
<ul>
|
|
696
|
-
<li><p>hexToRGB</p>
|
|
697
|
-
<p>将 colorcode 转换为rgb()字符串。</p>
|
|
698
|
-
<p>使用按位右运算符和掩码位与& (and) 运算符将十六进制颜色代码 (前缀为#) 转换为具有 RGB 值的字符串。如果它是一个3位数的 colorcode, 那么用 extendHex () 函数 (ref. extendHex代码段) 扩展的6位 colorcode 进行相同的处理</p>
|
|
699
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">hexToRgb</span> = hex => {</span><br><span class="line"><span class="keyword">const</span> <span class="title function_">extendHex</span> = shortHex =></span><br><span class="line"> <span class="string">'#'</span> + shortHex.<span class="title function_">slice</span>(shortHex.<span class="title function_">startsWith</span>(<span class="string">'#'</span>) ? <span class="number">1</span> : <span class="number">0</span>).<span class="title function_">split</span>(<span class="string">''</span>).<span class="title function_">map</span>(<span class="function"><span class="params">x</span> =></span> x+x).<span class="title function_">join</span>(<span class="string">''</span>);</span><br><span class="line"> <span class="keyword">const</span> extendedHex = hex.<span class="title function_">slice</span>(hex.<span class="title function_">startsWith</span>(<span class="string">'#'</span>) ? <span class="number">1</span> : <span class="number">0</span>).<span class="property">length</span> === <span class="number">3</span> ? <span class="title function_">extendHex</span>(hex) : hex;</span><br><span class="line"> <span class="keyword">return</span> <span class="string">`rgb(<span class="subst">${<span class="built_in">parseInt</span>(extendedHex.slice(<span class="number">1</span>), <span class="number">16</span>) >> <span class="number">16</span>}</span>, <span class="subst">${(<span class="built_in">parseInt</span>(extendedHex.slice(<span class="number">1</span>), <span class="number">16</span>) & <span class="number">0x00ff00</span>) >> <span class="number">8</span>}</span>, <span class="subst">${<span class="built_in">parseInt</span>(extendedHex.slice(<span class="number">1</span>), <span class="number">16</span>) & <span class="number">0x0000ff</span>}</span>)`</span>;</span><br><span class="line">}</span><br><span class="line"><span class="comment">// hexToRgb('#27ae60') -> 'rgb(39, 174, 96)'</span></span><br><span class="line"><span class="comment">// hexToRgb('#acd') -> 'rgb(170, 204, 221)'</span></span><br></pre></td></tr></table></figure></li>
|
|
700
|
-
</ul>
|
|
701
|
-
<hr>
|
|
702
|
-
<ul>
|
|
703
|
-
<li><p>isArray</p>
|
|
704
|
-
<p>检查给定参数是否为数组。</p>
|
|
705
|
-
<p>使用Array.isArray()检查某个值是否属于数组。</p>
|
|
706
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">isArray</span> = val => !!val && <span class="title class_">Array</span>.<span class="title function_">isArray</span>(val);</span><br><span class="line"><span class="comment">// isArray(null) -> false</span></span><br><span class="line"><span class="comment">// isArray([1]) -> true</span></span><br></pre></td></tr></table></figure></li>
|
|
707
|
-
</ul>
|
|
708
|
-
<hr>
|
|
709
|
-
<ul>
|
|
710
|
-
<li><p>isBoolean</p>
|
|
711
|
-
<p>检查给定的参数是否为本机布尔元素。</p>
|
|
712
|
-
<p>使用typeof检查某个值是否被归类为布尔基元。</p>
|
|
713
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">isBoolean</span> = val => <span class="keyword">typeof</span> val === <span class="string">'boolean'</span>;</span><br><span class="line"><span class="comment">// isBoolean(null) -> false</span></span><br><span class="line"><span class="comment">// isBoolean(false) -> true</span></span><br></pre></td></tr></table></figure></li>
|
|
714
|
-
</ul>
|
|
715
|
-
<hr>
|
|
716
|
-
<ul>
|
|
717
|
-
<li><p>isFunction</p>
|
|
718
|
-
<p>检查给定参数是否为函数。</p>
|
|
719
|
-
<p>使用typeof检查某个值是否被归类为函数基元。</p>
|
|
720
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">isFunction</span> = val => val && <span class="keyword">typeof</span> val === <span class="string">'function'</span>;</span><br><span class="line"><span class="comment">// isFunction('x') -> false</span></span><br><span class="line"><span class="comment">// isFunction(x => x) -> true</span></span><br></pre></td></tr></table></figure></li>
|
|
721
|
-
</ul>
|
|
722
|
-
<hr>
|
|
723
|
-
<ul>
|
|
724
|
-
<li><p>isNumber</p>
|
|
725
|
-
<p>检查给定参数是否为数字。</p>
|
|
726
|
-
<p>使用typeof检查某个值是否归类为数字基元。</p>
|
|
727
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">isNumber</span> = val => <span class="keyword">typeof</span> val === <span class="string">'number'</span>;</span><br><span class="line"><span class="comment">// isNumber('1') -> false</span></span><br><span class="line"><span class="comment">// isNumber(1) -> true</span></span><br></pre></td></tr></table></figure></li>
|
|
728
|
-
</ul>
|
|
729
|
-
<hr>
|
|
730
|
-
<ul>
|
|
731
|
-
<li><p>isString</p>
|
|
732
|
-
<p>检查给定参数是否为字符串。</p>
|
|
733
|
-
<p>使用typeof检查某个值是否属于字符串基元。</p>
|
|
734
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">isString</span> = val => <span class="keyword">typeof</span> val === <span class="string">'string'</span>;</span><br><span class="line"><span class="comment">// isString(10) -> false</span></span><br><span class="line"><span class="comment">// isString('10') -> true</span></span><br></pre></td></tr></table></figure></li>
|
|
735
|
-
</ul>
|
|
736
|
-
<hr>
|
|
737
|
-
<ul>
|
|
738
|
-
<li><p>isSymbol</p>
|
|
739
|
-
<p>检查给定参数是否为符号。</p>
|
|
740
|
-
<p>使用typeof检查某个值是否被归类为符号基元。</p>
|
|
741
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">isSymbol</span> = val => <span class="keyword">typeof</span> val === <span class="string">'symbol'</span>;</span><br><span class="line"><span class="comment">// isSymbol('x') -> false</span></span><br><span class="line"><span class="comment">// isSymbol(Symbol('x')) -> true</span></span><br></pre></td></tr></table></figure></li>
|
|
742
|
-
</ul>
|
|
743
|
-
<hr>
|
|
744
|
-
<ul>
|
|
745
|
-
<li><p>RGBToHex</p>
|
|
746
|
-
<p>将 RGB 组件的值转换为 colorcode。</p>
|
|
747
|
-
<p>使用按位左移位运算符 (<<) 和toString(16)将给定的 RGB 参数转换为十六进制字符串, 然后padStart(6,’0’)以获取6位十六进制值。</p>
|
|
748
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">RGBToHex</span> = (<span class="params">r, g, b</span>) => ((r << <span class="number">16</span>) + (g << <span class="number">8</span>) + b).<span class="title function_">toString</span>(<span class="number">16</span>).<span class="title function_">padStart</span>(<span class="number">6</span>, <span class="string">'0'</span>);</span><br><span class="line"><span class="comment">// RGBToHex(255, 165, 1) -> 'ffa501'</span></span><br></pre></td></tr></table></figure></li>
|
|
749
|
-
</ul>
|
|
750
|
-
<hr>
|
|
751
|
-
<ul>
|
|
752
|
-
<li><p>timeTaken</p>
|
|
753
|
-
<p>测量执行函数所用的时间。</p>
|
|
754
|
-
<p>使用console.time()和console.timeEnd()来测量开始和结束时间之间的差异, 以确定回调执行所用的时间。</p>
|
|
755
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">timeTaken</span> = callback => {</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">time</span>(<span class="string">'timeTaken'</span>); <span class="keyword">const</span> r = <span class="title function_">callback</span>();</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">timeEnd</span>(<span class="string">'timeTaken'</span>); <span class="keyword">return</span> r;</span><br><span class="line">};</span><br><span class="line"><span class="comment">// timeTaken(() => Math.pow(2, 10)) -> 1024</span></span><br><span class="line"><span class="comment">// (logged): timeTaken: 0.02099609375ms</span></span><br></pre></td></tr></table></figure></li>
|
|
756
|
-
</ul>
|
|
757
|
-
<hr>
|
|
758
|
-
<ul>
|
|
759
|
-
<li><p>toOrdinalSuffix</p>
|
|
760
|
-
<p>将序号后缀添加到数字。</p>
|
|
761
|
-
<p>使用模数运算符 (%) 查找单个和十位数字的值。查找匹配的序号模式数字。如果在青少年模式中发现数字, 请使用青少年序号。</p>
|
|
762
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">toOrdinalSuffix</span> = num => {</span><br><span class="line"><span class="keyword">const</span> int = <span class="built_in">parseInt</span>(num), digits = [(int % <span class="number">10</span>), (int % <span class="number">100</span>)],</span><br><span class="line"> ordinals = [<span class="string">'st'</span>, <span class="string">'nd'</span>, <span class="string">'rd'</span>, <span class="string">'th'</span>], oPattern = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>],</span><br><span class="line"> tPattern = [<span class="number">11</span>, <span class="number">12</span>, <span class="number">13</span>, <span class="number">14</span>, <span class="number">15</span>, <span class="number">16</span>, <span class="number">17</span>, <span class="number">18</span>, <span class="number">19</span>];</span><br><span class="line"> <span class="keyword">return</span> oPattern.<span class="title function_">includes</span>(digits[<span class="number">0</span>]) && !tPattern.<span class="title function_">includes</span>(digits[<span class="number">1</span>]) ? int + ordinals[digits[<span class="number">0</span>] - <span class="number">1</span>] : int + ordinals[<span class="number">3</span>];</span><br><span class="line">};</span><br><span class="line"><span class="comment">// toOrdinalSuffix("123") -> "123rd"</span></span><br></pre></td></tr></table></figure></li>
|
|
763
|
-
</ul>
|
|
764
|
-
<hr>
|
|
765
|
-
<ul>
|
|
766
|
-
<li><p>UUIDGenerator</p>
|
|
767
|
-
<p>生成 UUID。</p>
|
|
768
|
-
<p>使用cryptoAPI 生成 UUID, 符合RFC4122版本4。</p>
|
|
769
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">UUIDGenerator</span> = (<span class="params"></span>) =></span><br><span class="line"> ([<span class="number">1e7</span>] + -<span class="number">1e3</span> + -<span class="number">4e3</span> + -<span class="number">8e3</span> + -<span class="number">1e11</span>).<span class="title function_">replace</span>(<span class="regexp">/[018]/g</span>, <span class="function"><span class="params">c</span> =></span></span><br><span class="line"> (c ^ crypto.<span class="title function_">getRandomValues</span>(<span class="keyword">new</span> <span class="title class_">Uint8Array</span>(<span class="number">1</span>))[<span class="number">0</span>] & <span class="number">15</span> >> c / <span class="number">4</span>).<span class="title function_">toString</span>(<span class="number">16</span>)</span><br><span class="line">);</span><br><span class="line"><span class="comment">// UUIDGenerator() -> '7982fcfe-5721-4632-bede-6000885be57d'</span></span><br></pre></td></tr></table></figure></li>
|
|
770
|
-
</ul>
|
|
771
|
-
<hr>
|
|
772
|
-
<ul>
|
|
773
|
-
<li><p>validateEmail</p>
|
|
774
|
-
<p>如果给定的字符串是有效的电子邮件, 则返回true , 否则为false 。</p>
|
|
775
|
-
<p>使用正则表达式检查电子邮件是否有效。如果电子邮件有效, 则返回 true, 如果没有, 则true false 。</p>
|
|
776
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">validateEmail</span> = str =></span><br><span class="line"> <span class="regexp">/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/</span>.<span class="title function_">test</span>(str);</span><br><span class="line"><span class="comment">// validateEmail(mymail@gmail.com) -> true</span></span><br></pre></td></tr></table></figure></li>
|
|
777
|
-
</ul>
|
|
778
|
-
<hr>
|
|
779
|
-
<ul>
|
|
780
|
-
<li><p>validateNumber</p>
|
|
781
|
-
<p>如果给定值为数字, 则返回true , 否则为false 。</p>
|
|
782
|
-
<p>将!isNaN与parseFloat()结合使用, 以检查参数是否为数字。使用isFinite()检查数字是否是有限的。使用Number()检查强制是否保持。</p>
|
|
783
|
-
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title function_">validateNumber</span> = n => !<span class="built_in">isNaN</span>(<span class="built_in">parseFloat</span>(n)) && <span class="built_in">isFinite</span>(n) && <span class="title class_">Number</span>(n) == n;</span><br><span class="line"><span class="comment">// validateNumber('10') -> true</span></span><br></pre></td></tr></table></figure></li>
|
|
784
|
-
</ul>
|
|
785
|
-
<hr>
|
|
786
|
-
</div><div><ul class="post-copyright"><li class="post-copyright-author"><strong>本文作者:</strong>雪花雨</li><li class="post-copyright-link"><strong>本文链接:</strong><a href="/article/23301.html">https://xuehuayu.cn/article/23301.html</a></li><li class="post-copyright-license"><strong>版权声明:</strong>① 标为原创的文章为博主原创,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接。② 转载文章来自网络,已标明出处,<a href="mailto:cainiaoblog@126.com">侵删</a>。</li></ul></div><br><div class="tags"><a href="/tags/%E8%BD%AC%E8%BD%BD/">转载</a></div><div class="post-nav"><a class="pre" href="/article/52689.html">浏览器的一些“滚动”行为鉴赏</a><a class="next" href="/article/56816.html">利用"交叉观察者"(IntersectionObserver接口),轻松实现懒加载、吸顶、触底</a></div><div id="vcomment"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.min.css"><script src="//cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.js"></script><script>const origin = window.location.origin
|
|
787
|
-
const serverURL = origin.includes('cainiaoblog') ? 'https://cmts.cainiaoblog.cn' : 'https://cmts.xuehuayu.cn'
|
|
788
|
-
const locale = {
|
|
789
|
-
placeholder: '请正确填写昵称和邮箱,方便接收回复通知~',
|
|
790
|
-
sofa: '沙发空缺中,还不快抢~',
|
|
791
|
-
};
|
|
792
|
-
Waline.init({
|
|
793
|
-
el: '#vcomment',
|
|
794
|
-
serverURL: serverURL,
|
|
795
|
-
pageSize: '20',
|
|
796
|
-
visitor: true, // 阅读量统计
|
|
797
|
-
requiredMeta: ['nick', 'mail'],
|
|
798
|
-
emoji: [
|
|
799
|
-
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/weibo',
|
|
800
|
-
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/qq',
|
|
801
|
-
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/tw-emoji',
|
|
802
|
-
],
|
|
803
|
-
locale,
|
|
804
|
-
pageview: true
|
|
805
|
-
})
|
|
806
|
-
</script></div></div></div><div class="pure-u-1 pure-u-md-1-4 fixed-search hidden_mid_and_down"><div id="sidebar"><script type="text/javascript" src="//cdn.jsdelivr.net/npm/cainiaoblog@latest/js/search.min.js"></script><div class="widget"><div class="widget-search"><input class="search" type="radio" name="search" value="baidu" id="baidu" checked="checked"/><label class="label" for="baidu" title="百度全站搜索">百度</label><input class="search" type="radio" name="search" value="google" id="google"/><label class="label" for="google" title="谷歌全站搜索">谷歌</label><input class="search" type="radio" name="search" value="self" id="self"/><label class="label" for="self" title="使用站内搜索">站内</label></div><div class="widget" id="search"><form class="search-form" action="//www.baidu.com/baidu" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="word" maxlength="30" placeholder="百度全站搜索"/><input type="hidden" name="si" value="xuehuayu.cn"/><input type="hidden" name="cl" value="3"/><input type="hidden" name="ct" value="2097152"/><input type="hidden" name="s" value="on"/><input class="search-submit" type="submit" value=""/></form></div></div><script>$('input[type=radio][name=search]').change(function() {
|
|
807
|
-
var val = $(this).val()
|
|
808
|
-
var self = '<div class="search-form"><input id="local-search-input" placeholder="站内搜索,首次慢" type="search" name="q" results="0"><input class="search-submit" type="submit" value=""/><div id="local-search-result"></div></div>'
|
|
809
|
-
var google = '<form class="search-form" action="//www.google.com/search" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="q" maxlength="30" placeholder="谷歌全站搜索"><input type="hidden" name="sitesearch" value="xuehuayu.cn"><input class="search-submit" type="submit" value=""/></form>'
|
|
810
|
-
var baidu = '<form class="search-form" action="//www.baidu.com/baidu" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="word" maxlength="30" placeholder="百度全站搜索"><input type="hidden" name="si" value="xuehuayu.cn"><input type="hidden" name="cl" value="3"><input type="hidden" name="ct" value="2097152"><input type="hidden" name="s" value="on"><input class="search-submit" type="submit" value=""/></form>'
|
|
811
|
-
|
|
812
|
-
if (val === 'self') {
|
|
813
|
-
$('#search').html(self)
|
|
814
|
-
var search_path = 'search.xml';
|
|
815
|
-
if (search_path.length == 0) {
|
|
816
|
-
search_path = 'search.xml';
|
|
817
|
-
}
|
|
818
|
-
var path = 'https://cdn.staticaly.com/gh/npljy/npljy.github.io/main/' + search_path;
|
|
819
|
-
searchFunc(path, 'local-search-input', 'local-search-result');
|
|
820
|
-
} else if (val === 'baidu') {
|
|
821
|
-
$('#search').html(baidu)
|
|
822
|
-
} else if (val === 'google') {
|
|
823
|
-
$('#search').html(google)
|
|
824
|
-
}
|
|
825
|
-
})</script><div class="widget widget-wxmp"><img alt="微信公众号" width="100%" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/mp-mini.jpg"/></div><div class="widget widget-categories"><div class="widget-title"><i class="fa fa-folder-o"> 分类</i></div><ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/CDN/">CDN</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/IDE/">IDE</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/git/">git</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/hexo/">hexo</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%85%AC%E5%85%B1%E8%8A%82%E6%97%A5/">公共节日</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%88%86%E4%BA%AB/">分享</a><span class="category-list-count">29</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/">前端</a><span class="category-list-count">190</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/%E6%B5%8F%E8%A7%88%E5%99%A8/">浏览器</a><span class="category-list-count">1</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/%E6%B5%8F%E8%A7%88%E5%99%A8/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/">网络协议</a><span class="category-list-count">1</span></li></ul></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%8D%9A%E5%AE%A2/">博客</a><span class="category-list-count">3</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B7%A5%E5%85%B7/">工具</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4/">广告过滤</a><span class="category-list-count">8</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4/%E5%BD%B1%E8%A7%86%E7%94%B5%E8%A7%86%E5%B0%8F%E8%AF%B4%E6%BC%AB%E7%94%BB%E8%B5%84%E8%AE%AF%E9%9F%B3%E4%B9%90/">影视电视小说漫画资讯音乐</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4/%E8%A7%86%E9%A2%91%E7%94%B5%E8%A7%86%E5%B0%8F%E8%AF%B4%E6%BC%AB%E7%94%BB%E8%B5%84%E8%AE%AF%E9%9F%B3%E4%B9%90/">视频电视小说漫画资讯音乐</a><span class="category-list-count">1</span></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%AD%A3%E5%88%99/">正则</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%B5%8F%E8%A7%88%E5%99%A8/">浏览器</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E7%AE%97%E6%B3%95/">算法</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%B5%84%E8%AE%AF/">资讯</a><span class="category-list-count">16</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%BD%BB%E6%9D%BE%E4%B8%80%E5%88%BB/">轻松一刻</a><span class="category-list-count">1</span></li></ul></div><div class="widget widget-tags"><div class="widget-title"><i class="fa fa-star-o"> 标签</i></div><div class="tagcloud"><a href="/tags/%E5%8E%9F%E5%88%9B/" style="font-size: 15px;">原创</a> <a href="/tags/%E8%BD%AC%E8%BD%BD/" style="font-size: 15px;">转载</a> <a href="/tags/%E6%89%8B%E5%86%99/" style="font-size: 15px;">手写</a> <a href="/tags/%E7%96%AB%E6%83%85/" style="font-size: 15px;">疫情</a> <a href="/tags/%E5%A8%B1%E4%B9%90/" style="font-size: 15px;">娱乐</a></div></div><div class="widget widget-recent-posts"><div class="widget-title"><i class="fa fa-file-o"> 最近文章</i></div><ul class="post-list"><li class="post-list-item"><a class="post-list-link" href="/article/9c3c56c.html">vue、react、webpack、babel</a></li><li class="post-list-item"><a class="post-list-link" href="/article/84c9ccd6.html">精读《SolidJS》</a></li><li class="post-list-item"><a class="post-list-link" href="/article/53803e6.html">git提交注释规范</a></li><li class="post-list-item"><a class="post-list-link" href="/article/a4145266.html">前端数组拍平flat一行代码</a></li><li class="post-list-item"><a class="post-list-link" href="/article/bedea419.html">一道前端this面试题</a></li><li class="post-list-item"><a class="post-list-link" href="/article/bf7e7421.html">git多账号配置</a></li></ul></div><div class="widget widget-links"><div class="widget-title"><i class="fa fa-external-link"> 友情链接</i></div><ul></ul><a href="https://github.com/npljy?utm_source=xuehuayu.cn" title="GitHub" target="_blank">GitHub</a><ul></ul><a href="https://laonongmin.online?utm_source=xuehuayu.cn" title="看看" target="_blank">看看</a><ul></ul><a href="https://cainiaoblog.cn?utm_source=xuehuayu.cn" title="菜鸟博客" target="_blank">菜鸟博客</a><ul></ul><a href="mailto:cainiaoblog@126.com" title="友链联系" target="_blank">友链联系</a></div></div></div><div class="pure-u-1 pure-u-md-3-4"><div id="footer"><div class="flex-block justify-center align-center flex-wrap"><a class="gxba-link" id="gxba" rel="nofollow" target="_blank" href="http://beian.miit.gov.cn/">京ICP备20007647号-2</a><a class="gaba-link" id="gaba-link" rel="nofollow" target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031264"><img class="nofancybox" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/gaba.png" alt=""/><span id="gaba">京公网安备 11010802031264号</span><span style="padding-right: 10px;"></span></a><span>Copyright © 2023 </span><a href="/." rel="nofollow">前端壹菜鸟. </a><script>(function(){
|
|
826
|
-
var cnb =window.location.origin.indexOf('cainiaoblog') !==-1
|
|
827
|
-
if (cnb) {
|
|
828
|
-
var gxba =document.getElementById('gxba')
|
|
829
|
-
var gaba =document.getElementById('gaba')
|
|
830
|
-
var gabaLink =document.getElementById('gaba-link')
|
|
831
|
-
gxba.innerText ='京ICP备20007647号-1'
|
|
832
|
-
gaba.innerText ='京公网安备 11010802031254号'
|
|
833
|
-
gabaLink.setAttribute('href','http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031254')
|
|
834
|
-
}
|
|
835
|
-
})()</script></div><div class="flex-block justify-center align-center flex-wrap"><a rel="nofollow" target="_blank" href="https://v6.51.la/s/Guz3lwHCsVme9Cu"><div class="busuanzi_container" id="busuanzi_container"><span class="busuanzi_container_site_pv" id="busuanzi_container_site_pv">访问量:<span id="busuanzi_value_site_pv"><i class="fa fa-spinner"></i></span></span><span class="busuanzi_container_site_uv" id="busuanzi_container_site_uv">访客数:<span id="busuanzi_value_site_uv"><i class="fa fa-spinner"></i></span></span><span style="padding-right: 10px;"></span></div></a><a rel="nofollow" target="_blank" href="https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral"><span style="font-weight:bold;letter-spacing: 1px;">本网站由 </span><img class="nofancybox" height="32" style="vertical-align: middle" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/upy_logo.min.svg" alt=""/><span style="font-weight:bold;letter-spacing: 1px;">提供CDN加速/云存储服务</span></a><span style="padding-right: 10px;"></span><a rel="nofollow" style="font-size:18px;font-weight:bold;vertical-align: middle" target="_blank" title="注册就送代金券可直接使用" href="https://console.upyun.com/register/?invite=HyDsjZHIL">注册</a></div></div></div></div><a class="show" id="rocket" href="#top"></a><div class="darkmode-toggle">🌓</div><script type="text/javascript" src="//cdn.jsdelivr.net/npm/cainiaoblog@latest/js/totop.min.js" async></script><script type="text/javascript" src="//cdn.jsdelivr.net/npm/cainiaoblog@latest/js/dark.min.js" async></script><script type="text/javascript" src="//cdn.jsdelivr.net/npm/cainiaoblog@latest/js/codeblock-resizer.min.js"></script><script type="text/javascript" src="//cdn.jsdelivr.net/npm/cainiaoblog@latest/js/smartresize.min.js"></script></div></body></html>
|