|
|
|
<!DOCTYPE html> |
|
<html> |
|
<head> |
|
<title>no title</title> |
|
<meta charset="utf-8"> |
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
<style> |
|
.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers>code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for="preview"]) .code-chunk .btn-group{display:none}.markdown-preview:not([for="preview"]) .code-chunk .status{display:none}.markdown-preview:not([for="preview"]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% - 300px);padding:2em calc(50% - 457px - 150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}/** |
|
* prism.js Github theme based on GitHub's theme. |
|
* @author Sam Clarke |
|
*/ |
|
code[class*="language-"], |
|
pre[class*="language-"] { |
|
color: #333; |
|
background: none; |
|
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; |
|
text-align: left; |
|
white-space: pre; |
|
word-spacing: normal; |
|
word-break: normal; |
|
word-wrap: normal; |
|
line-height: 1.4; |
|
|
|
-moz-tab-size: 8; |
|
-o-tab-size: 8; |
|
tab-size: 8; |
|
|
|
-webkit-hyphens: none; |
|
-moz-hyphens: none; |
|
-ms-hyphens: none; |
|
hyphens: none; |
|
} |
|
|
|
/* Code blocks */ |
|
pre[class*="language-"] { |
|
padding: .8em; |
|
overflow: auto; |
|
/* border: 1px solid #ddd; */ |
|
border-radius: 3px; |
|
/* background: #fff; */ |
|
background: #f5f5f5; |
|
} |
|
|
|
/* Inline code */ |
|
:not(pre) > code[class*="language-"] { |
|
padding: .1em; |
|
border-radius: .3em; |
|
white-space: normal; |
|
background: #f5f5f5; |
|
} |
|
|
|
.token.comment, |
|
.token.blockquote { |
|
color: #969896; |
|
} |
|
|
|
.token.cdata { |
|
color: #183691; |
|
} |
|
|
|
.token.doctype, |
|
.token.punctuation, |
|
.token.variable, |
|
.token.macro.property { |
|
color: #333; |
|
} |
|
|
|
.token.operator, |
|
.token.important, |
|
.token.keyword, |
|
.token.rule, |
|
.token.builtin { |
|
color: #a71d5d; |
|
} |
|
|
|
.token.string, |
|
.token.url, |
|
.token.regex, |
|
.token.attr-value { |
|
color: #183691; |
|
} |
|
|
|
.token.property, |
|
.token.number, |
|
.token.boolean, |
|
.token.entity, |
|
.token.atrule, |
|
.token.constant, |
|
.token.symbol, |
|
.token.command, |
|
.token.code { |
|
color: #0086b3; |
|
} |
|
|
|
.token.tag, |
|
.token.selector, |
|
.token.prolog { |
|
color: #63a35c; |
|
} |
|
|
|
.token.function, |
|
.token.namespace, |
|
.token.pseudo-element, |
|
.token.class, |
|
.token.class-name, |
|
.token.pseudo-class, |
|
.token.id, |
|
.token.url-reference .token.variable, |
|
.token.attr-name { |
|
color: #795da3; |
|
} |
|
|
|
.token.entity { |
|
cursor: help; |
|
} |
|
|
|
.token.title, |
|
.token.title .token.punctuation { |
|
font-weight: bold; |
|
color: #1d3e81; |
|
} |
|
|
|
.token.list { |
|
color: #ed6a43; |
|
} |
|
|
|
.token.inserted { |
|
background-color: #eaffea; |
|
color: #55a532; |
|
} |
|
|
|
.token.deleted { |
|
background-color: #ffecec; |
|
color: #bd2c00; |
|
} |
|
|
|
.token.bold { |
|
font-weight: bold; |
|
} |
|
|
|
.token.italic { |
|
font-style: italic; |
|
} |
|
|
|
|
|
/* JSON */ |
|
.language-json .token.property { |
|
color: #183691; |
|
} |
|
|
|
.language-markup .token.tag .token.punctuation { |
|
color: #333; |
|
} |
|
|
|
/* CSS */ |
|
code.language-css, |
|
.language-css .token.function { |
|
color: #0086b3; |
|
} |
|
|
|
/* YAML */ |
|
.language-yaml .token.atrule { |
|
color: #63a35c; |
|
} |
|
|
|
code.language-yaml { |
|
color: #183691; |
|
} |
|
|
|
/* Ruby */ |
|
.language-ruby .token.function { |
|
color: #333; |
|
} |
|
|
|
/* Markdown */ |
|
.language-markdown .token.url { |
|
color: #795da3; |
|
} |
|
|
|
/* Makefile */ |
|
.language-makefile .token.symbol { |
|
color: #795da3; |
|
} |
|
|
|
.language-makefile .token.variable { |
|
color: #183691; |
|
} |
|
|
|
.language-makefile .token.builtin { |
|
color: #0086b3; |
|
} |
|
|
|
/* Bash */ |
|
.language-bash .token.keyword { |
|
color: #0086b3; |
|
} |
|
|
|
/* highlight */ |
|
pre[data-line] { |
|
position: relative; |
|
padding: 1em 0 1em 3em; |
|
} |
|
pre[data-line] .line-highlight-wrapper { |
|
position: absolute; |
|
top: 0; |
|
left: 0; |
|
background-color: transparent; |
|
display: block; |
|
width: 100%; |
|
} |
|
|
|
pre[data-line] .line-highlight { |
|
position: absolute; |
|
left: 0; |
|
right: 0; |
|
padding: inherit 0; |
|
margin-top: 1em; |
|
background: hsla(24, 20%, 50%,.08); |
|
background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0)); |
|
pointer-events: none; |
|
line-height: inherit; |
|
white-space: pre; |
|
} |
|
|
|
pre[data-line] .line-highlight:before, |
|
pre[data-line] .line-highlight[data-end]:after { |
|
content: attr(data-start); |
|
position: absolute; |
|
top: .4em; |
|
left: .6em; |
|
min-width: 1em; |
|
padding: 0 .5em; |
|
background-color: hsla(24, 20%, 50%,.4); |
|
color: hsl(24, 20%, 95%); |
|
font: bold 65%/1.5 sans-serif; |
|
text-align: center; |
|
vertical-align: .3em; |
|
border-radius: 999px; |
|
text-shadow: none; |
|
box-shadow: 0 1px white; |
|
} |
|
|
|
pre[data-line] .line-highlight[data-end]:after { |
|
content: attr(data-end); |
|
top: auto; |
|
bottom: .4em; |
|
}.emoji { |
|
height: 0.8em; |
|
}html body{font-family:"Helvetica Neue",Helvetica,"Segoe UI",Arial,freesans,sans-serif;font-size:16px;line-height:1.6;color:#333;background-color:#fff;overflow:initial;box-sizing:border-box;word-wrap:break-word}html body>:first-child{margin-top:0}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{line-height:1.2;margin-top:1em;margin-bottom:16px;color:#000}html body h1{font-size:2.25em;font-weight:300;padding-bottom:.3em}html body h2{font-size:1.75em;font-weight:400;padding-bottom:.3em}html body h3{font-size:1.5em;font-weight:500}html body h4{font-size:1.25em;font-weight:600}html body h5{font-size:1.1em;font-weight:600}html body h6{font-size:1em;font-weight:600}html body h1,html body h2,html body h3,html body h4,html body h5{font-weight:600}html body h5{font-size:1em}html body h6{color:#5c5c5c}html body strong{color:#000}html body del{color:#5c5c5c}html body a:not([href]){color:inherit;text-decoration:none}html body a{color:#08c;text-decoration:none}html body a:hover{color:#00a3f5;text-decoration:none}html body img{max-width:100%}html body>p{margin-top:0;margin-bottom:16px;word-wrap:break-word}html body>ul,html body>ol{margin-bottom:16px}html body ul,html body ol{padding-left:2em}html body ul.no-list,html body ol.no-list{padding:0;list-style-type:none}html body ul ul,html body ul ol,html body ol ol,html body ol ul{margin-top:0;margin-bottom:0}html body li{margin-bottom:0}html body li.task-list-item{list-style:none}html body li>p{margin-top:0;margin-bottom:0}html body .task-list-item-checkbox{margin:0 .2em .25em -1.8em;vertical-align:middle}html body .task-list-item-checkbox:hover{cursor:pointer}html body blockquote{margin:16px 0;font-size:inherit;padding:0 15px;color:#5c5c5c;background-color:#f0f0f0;border-left:4px solid #d6d6d6}html body blockquote>:first-child{margin-top:0}html body blockquote>:last-child{margin-bottom:0}html body hr{height:4px;margin:32px 0;background-color:#d6d6d6;border:0 none}html body table{margin:10px 0 15px 0;border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}html body table th{font-weight:bold;color:#000}html body table td,html body table th{border:1px solid #d6d6d6;padding:6px 13px}html body dl{padding:0}html body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:bold}html body dl dd{padding:0 16px;margin-bottom:16px}html body code{font-family:Menlo,Monaco,Consolas,'Courier New',monospace;font-size:.85em !important;color:#000;background-color:#f0f0f0;border-radius:3px;padding:.2em 0}html body code::before,html body code::after{letter-spacing:-0.2em;content:"\00a0"}html body pre>code{padding:0;margin:0;font-size:.85em !important;word-break:normal;white-space:pre;background:transparent;border:0}html body .highlight{margin-bottom:16px}html body .highlight pre,html body pre{padding:1em;overflow:auto;font-size:.85em !important;line-height:1.45;border:#d6d6d6;border-radius:3px}html body .highlight pre{margin-bottom:0;word-break:normal}html body pre code,html body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}html body pre code:before,html body pre tt:before,html body pre code:after,html body pre tt:after{content:normal}html body p,html body blockquote,html body ul,html body ol,html body dl,html body pre{margin-top:0;margin-bottom:16px}html body kbd{color:#000;border:1px solid #d6d6d6;border-bottom:2px solid #c7c7c7;padding:2px 4px;background-color:#f0f0f0;border-radius:3px}@media print{html body{background-color:#fff}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{color:#000;page-break-after:avoid}html body blockquote{color:#5c5c5c}html body pre{page-break-inside:avoid}html body table{display:table}html body img{display:block;max-width:100%;max-height:100%}html body pre,html body code{word-wrap:break-word;white-space:pre}} |
|
html body:before { |
|
content: "Failed to compile `style.less`. NameError: Property '$font-primary' is undefined in input on line 10, column 18: |
|
9 html { |
|
10 font-family: $font-primary; |
|
11 font-size: 110%; |
|
" !important; |
|
padding: 2em !important; |
|
} |
|
.mume.mume { display: none !important; } |
|
</style> |
|
|
|
</head> |
|
<body for="html-export"> |
|
<div class="mume markdown-preview"> |
|
<html><head></head><body><div><p>Converts a comma-separated values (CSV) string to a 2D array.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.slice()</code> and <code>Array.prototype.indexOf('\n')</code> to remove the first row (title row) if <code>omitFirstRow</code> is <code>true</code>.</li> |
|
<li>Use <code>String.prototype.split('\n')</code> to create a string for each row, then <code>String.prototype.split(delimiter)</code> to separate the values in each row.</li> |
|
<li>Omit the second argument, <code>delimiter</code>, to use a default delimiter of <code>','</code>.</li> |
|
<li>Omit the third argument, <code>omitFirstRow</code>, to include the first row (title row) of the CSV string.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> CSVToArray <span class="token operator">=</span> <span class="token punctuation">(</span>data<span class="token punctuation">,</span> delimiter <span class="token operator">=</span> <span class="token string">','</span><span class="token punctuation">,</span> omitFirstRow <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">)</span> <span class="token operator">=></span> |
|
data |
|
<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span>omitFirstRow <span class="token operator">?</span> data<span class="token punctuation">.</span><span class="token function">indexOf</span><span class="token punctuation">(</span><span class="token string">'\n'</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">1</span> <span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span><span class="token string">'\n'</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>v <span class="token operator">=></span> v<span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span>delimiter<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">CSVToArray</span><span class="token punctuation">(</span><span class="token string">'a,b\nc,d'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [['a', 'b'], ['c', 'd']];</span> |
|
<span class="token function">CSVToArray</span><span class="token punctuation">(</span><span class="token string">'a;b\nc;d'</span><span class="token punctuation">,</span> <span class="token string">';'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [['a', 'b'], ['c', 'd']];</span> |
|
<span class="token function">CSVToArray</span><span class="token punctuation">(</span><span class="token string">'col1,col2\na,b\nc,d'</span><span class="token punctuation">,</span> <span class="token string">','</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [['a', 'b'], ['c', 'd']];</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: CSVToJSON">title: CSVToJSON</h2> |
|
<p>Converts a comma-separated values (CSV) string to a 2D array of objects.<br> |
|
The first row of the string is used as the title row.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.slice()</code> and <code>Array.prototype.indexOf('\n')</code> and <code>String.prototype.split(delimiter)</code> to separate the first row (title row) into values.</li> |
|
<li>Use <code>String.prototype.split('\n')</code> to create a string for each row, then <code>Array.prototype.map()</code> and <code>String.prototype.split(delimiter)</code> to separate the values in each row.</li> |
|
<li>Use <code>Array.prototype.reduce()</code> to create an object for each row's values, with the keys parsed from the title row.</li> |
|
<li>Omit the second argument, <code>delimiter</code>, to use a default delimiter of <code>,</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> CSVToJSON <span class="token operator">=</span> <span class="token punctuation">(</span>data<span class="token punctuation">,</span> delimiter <span class="token operator">=</span> <span class="token string">','</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> titles <span class="token operator">=</span> data<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> data<span class="token punctuation">.</span><span class="token function">indexOf</span><span class="token punctuation">(</span><span class="token string">'\n'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span>delimiter<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> data |
|
<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span>data<span class="token punctuation">.</span><span class="token function">indexOf</span><span class="token punctuation">(</span><span class="token string">'\n'</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span><span class="token string">'\n'</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>v <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> values <span class="token operator">=</span> v<span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span>delimiter<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> titles<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span> |
|
<span class="token punctuation">(</span>obj<span class="token punctuation">,</span> title<span class="token punctuation">,</span> index<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token punctuation">(</span>obj<span class="token punctuation">[</span>title<span class="token punctuation">]</span> <span class="token operator">=</span> values<span class="token punctuation">[</span>index<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> obj<span class="token punctuation">)</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">{</span><span class="token punctuation">}</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">CSVToJSON</span><span class="token punctuation">(</span><span class="token string">'col1,col2\na,b\nc,d'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// [{'col1': 'a', 'col2': 'b'}, {'col1': 'c', 'col2': 'd'}];</span> |
|
<span class="token function">CSVToJSON</span><span class="token punctuation">(</span><span class="token string">'col1;col2\na;b\nc;d'</span><span class="token punctuation">,</span> <span class="token string">';'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// [{'col1': 'a', 'col2': 'b'}, {'col1': 'c', 'col2': 'd'}];</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: CSVToArray">title: CSVToArray</h2> |
|
<p>Converts a comma-separated values (CSV) string to a 2D array.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.slice()</code> and <code>Array.prototype.indexOf('\n')</code> to remove the first row (title row) if <code>omitFirstRow</code> is <code>true</code>.</li> |
|
<li>Use <code>String.prototype.split('\n')</code> to create a string for each row, then <code>String.prototype.split(delimiter)</code> to separate the values in each row.</li> |
|
<li>Omit the second argument, <code>delimiter</code>, to use a default delimiter of <code>','</code>.</li> |
|
<li>Omit the third argument, <code>omitFirstRow</code>, to include the first row (title row) of the CSV string.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> CSVToArray <span class="token operator">=</span> <span class="token punctuation">(</span>data<span class="token punctuation">,</span> delimiter <span class="token operator">=</span> <span class="token string">','</span><span class="token punctuation">,</span> omitFirstRow <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">)</span> <span class="token operator">=></span> |
|
data |
|
<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span>omitFirstRow <span class="token operator">?</span> data<span class="token punctuation">.</span><span class="token function">indexOf</span><span class="token punctuation">(</span><span class="token string">'\n'</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">1</span> <span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span><span class="token string">'\n'</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>v <span class="token operator">=></span> v<span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span>delimiter<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">CSVToArray</span><span class="token punctuation">(</span><span class="token string">'a,b\nc,d'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [['a', 'b'], ['c', 'd']];</span> |
|
<span class="token function">CSVToArray</span><span class="token punctuation">(</span><span class="token string">'a;b\nc;d'</span><span class="token punctuation">,</span> <span class="token string">';'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [['a', 'b'], ['c', 'd']];</span> |
|
<span class="token function">CSVToArray</span><span class="token punctuation">(</span><span class="token string">'col1,col2\na,b\nc,d'</span><span class="token punctuation">,</span> <span class="token string">','</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [['a', 'b'], ['c', 'd']];</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: CSVToJSON">title: CSVToJSON</h2> |
|
<p>Converts a comma-separated values (CSV) string to a 2D array of objects.<br> |
|
The first row of the string is used as the title row.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.slice()</code> and <code>Array.prototype.indexOf('\n')</code> and <code>String.prototype.split(delimiter)</code> to separate the first row (title row) into values.</li> |
|
<li>Use <code>String.prototype.split('\n')</code> to create a string for each row, then <code>Array.prototype.map()</code> and <code>String.prototype.split(delimiter)</code> to separate the values in each row.</li> |
|
<li>Use <code>Array.prototype.reduce()</code> to create an object for each row's values, with the keys parsed from the title row.</li> |
|
<li>Omit the second argument, <code>delimiter</code>, to use a default delimiter of <code>,</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> CSVToJSON <span class="token operator">=</span> <span class="token punctuation">(</span>data<span class="token punctuation">,</span> delimiter <span class="token operator">=</span> <span class="token string">','</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> titles <span class="token operator">=</span> data<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> data<span class="token punctuation">.</span><span class="token function">indexOf</span><span class="token punctuation">(</span><span class="token string">'\n'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span>delimiter<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> data |
|
<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span>data<span class="token punctuation">.</span><span class="token function">indexOf</span><span class="token punctuation">(</span><span class="token string">'\n'</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span><span class="token string">'\n'</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>v <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> values <span class="token operator">=</span> v<span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span>delimiter<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> titles<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span> |
|
<span class="token punctuation">(</span>obj<span class="token punctuation">,</span> title<span class="token punctuation">,</span> index<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token punctuation">(</span>obj<span class="token punctuation">[</span>title<span class="token punctuation">]</span> <span class="token operator">=</span> values<span class="token punctuation">[</span>index<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> obj<span class="token punctuation">)</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">{</span><span class="token punctuation">}</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">CSVToJSON</span><span class="token punctuation">(</span><span class="token string">'col1,col2\na,b\nc,d'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// [{'col1': 'a', 'col2': 'b'}, {'col1': 'c', 'col2': 'd'}];</span> |
|
<span class="token function">CSVToJSON</span><span class="token punctuation">(</span><span class="token string">'col1;col2\na;b\nc;d'</span><span class="token punctuation">,</span> <span class="token string">';'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// [{'col1': 'a', 'col2': 'b'}, {'col1': 'c', 'col2': 'd'}];</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: HSBToRGB">title: HSBToRGB</h2> |
|
<p>Converts a HSB color tuple to RGB format.</p> |
|
<ul> |
|
<li>Use the <a href="https://en.wikipedia.org/wiki/HSL_and_HSV#HSV_to_RGB">HSB to RGB conversion formula</a> to convert to the appropriate format.</li> |
|
<li>The range of the input parameters is H: [0, 360], S: [0, 100], B: [0, 100].</li> |
|
<li>The range of all output values is [0, 255].</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">HSBToRGB</span> <span class="token operator">=</span> <span class="token punctuation">(</span>h<span class="token punctuation">,</span> s<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
s <span class="token operator">/=</span> <span class="token number">100</span><span class="token punctuation">;</span> |
|
b <span class="token operator">/=</span> <span class="token number">100</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> <span class="token function-variable function">k</span> <span class="token operator">=</span> <span class="token punctuation">(</span>n<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span>n <span class="token operator">+</span> h <span class="token operator">/</span> <span class="token number">60</span><span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">6</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> <span class="token function-variable function">f</span> <span class="token operator">=</span> <span class="token punctuation">(</span>n<span class="token punctuation">)</span> <span class="token operator">=></span> b <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> s <span class="token operator">*</span> Math<span class="token punctuation">.</span><span class="token function">max</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> Math<span class="token punctuation">.</span><span class="token function">min</span><span class="token punctuation">(</span><span class="token function">k</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">4</span> <span class="token operator">-</span> <span class="token function">k</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> <span class="token punctuation">[</span><span class="token number">255</span> <span class="token operator">*</span> <span class="token function">f</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">255</span> <span class="token operator">*</span> <span class="token function">f</span><span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">255</span> <span class="token operator">*</span> <span class="token function">f</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">HSBToRGB</span><span class="token punctuation">(</span><span class="token number">18</span><span class="token punctuation">,</span> <span class="token number">81</span><span class="token punctuation">,</span> <span class="token number">99</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [252.45, 109.31084999999996, 47.965499999999984]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: HSLToRGB">title: HSLToRGB</h2> |
|
<p>Converts a HSL color tuple to RGB format.</p> |
|
<ul> |
|
<li>Use the <a href="https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_RGB">HSL to RGB conversion formula</a> to convert to the appropriate format.</li> |
|
<li>The range of the input parameters is H: [0, 360], S: [0, 100], L: [0, 100].</li> |
|
<li>The range of all output values is [0, 255].</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">HSLToRGB</span> <span class="token operator">=</span> <span class="token punctuation">(</span>h<span class="token punctuation">,</span> s<span class="token punctuation">,</span> l<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
s <span class="token operator">/=</span> <span class="token number">100</span><span class="token punctuation">;</span> |
|
l <span class="token operator">/=</span> <span class="token number">100</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> <span class="token function-variable function">k</span> <span class="token operator">=</span> n <span class="token operator">=></span> <span class="token punctuation">(</span>n <span class="token operator">+</span> h <span class="token operator">/</span> <span class="token number">30</span><span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">12</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> a <span class="token operator">=</span> s <span class="token operator">*</span> Math<span class="token punctuation">.</span><span class="token function">min</span><span class="token punctuation">(</span>l<span class="token punctuation">,</span> <span class="token number">1</span> <span class="token operator">-</span> l<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> <span class="token function-variable function">f</span> <span class="token operator">=</span> n <span class="token operator">=></span> |
|
l <span class="token operator">-</span> a <span class="token operator">*</span> Math<span class="token punctuation">.</span><span class="token function">max</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> Math<span class="token punctuation">.</span><span class="token function">min</span><span class="token punctuation">(</span><span class="token function">k</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token number">3</span><span class="token punctuation">,</span> Math<span class="token punctuation">.</span><span class="token function">min</span><span class="token punctuation">(</span><span class="token number">9</span> <span class="token operator">-</span> <span class="token function">k</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> <span class="token punctuation">[</span><span class="token number">255</span> <span class="token operator">*</span> <span class="token function">f</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">255</span> <span class="token operator">*</span> <span class="token function">f</span><span class="token punctuation">(</span><span class="token number">8</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">255</span> <span class="token operator">*</span> <span class="token function">f</span><span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">HSLToRGB</span><span class="token punctuation">(</span><span class="token number">13</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">11</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [56.1, 12.155, 0]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: JSONToFile">title: JSONToFile</h2> |
|
<p>Writes a JSON object to a file.</p> |
|
<ul> |
|
<li>Use <code>fs.writeFileSync()</code>, template literals and <code>JSON.stringify()</code> to write a <code>json</code> object to a <code>.json</code> file.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> fs <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'fs'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
|
|
<span class="token keyword keyword-const">const</span> <span class="token function-variable function">JSONToFile</span> <span class="token operator">=</span> <span class="token punctuation">(</span>obj<span class="token punctuation">,</span> filename<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
fs<span class="token punctuation">.</span><span class="token function">writeFileSync</span><span class="token punctuation">(</span><span class="token template-string"><span class="token string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>filename<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">.json`</span></span><span class="token punctuation">,</span> <span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">stringify</span><span class="token punctuation">(</span>obj<span class="token punctuation">,</span> <span class="token keyword keyword-null">null</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">JSONToFile</span><span class="token punctuation">(</span><span class="token punctuation">{</span> test<span class="token punctuation">:</span> <span class="token string">'is passed'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">'testJsonFile'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// writes the object to 'testJsonFile.json'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: JSONtoCSV">title: JSONtoCSV</h2> |
|
<p>Converts an array of objects to a comma-separated values (CSV) string that contains only the <code>columns</code> specified.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.join(delimiter)</code> to combine all the names in <code>columns</code> to create the first row.</li> |
|
<li>Use <code>Array.prototype.map()</code> and <code>Array.prototype.reduce()</code> to create a row for each object. Substitute non-existent values with empty strings and only mapping values in <code>columns</code>.</li> |
|
<li>Use <code>Array.prototype.join('\n')</code> to combine all rows into a string.</li> |
|
<li>Omit the third argument, <code>delimiter</code>, to use a default delimiter of <code>','</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> JSONtoCSV <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> columns<span class="token punctuation">,</span> delimiter <span class="token operator">=</span> <span class="token string">','</span><span class="token punctuation">)</span> <span class="token operator">=></span> |
|
<span class="token punctuation">[</span> |
|
columns<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span>delimiter<span class="token punctuation">)</span><span class="token punctuation">,</span> |
|
<span class="token operator">...</span>arr<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>obj <span class="token operator">=></span> |
|
columns<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span> |
|
<span class="token punctuation">(</span>acc<span class="token punctuation">,</span> key<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
<span class="token template-string"><span class="token string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>acc<span class="token interpolation-punctuation punctuation">}</span></span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span><span class="token operator">!</span>acc<span class="token punctuation">.</span>length <span class="token operator">?</span> <span class="token string">''</span> <span class="token punctuation">:</span> delimiter<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">"</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span><span class="token operator">!</span>obj<span class="token punctuation">[</span>key<span class="token punctuation">]</span> <span class="token operator">?</span> <span class="token string">''</span> <span class="token punctuation">:</span> obj<span class="token punctuation">[</span>key<span class="token punctuation">]</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">"`</span></span><span class="token punctuation">,</span> |
|
<span class="token string">''</span> |
|
<span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">'\n'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">JSONtoCSV</span><span class="token punctuation">(</span> |
|
<span class="token punctuation">[</span><span class="token punctuation">{</span> a<span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span> b<span class="token punctuation">:</span> <span class="token number">2</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> a<span class="token punctuation">:</span> <span class="token number">3</span><span class="token punctuation">,</span> b<span class="token punctuation">:</span> <span class="token number">4</span><span class="token punctuation">,</span> c<span class="token punctuation">:</span> <span class="token number">5</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> a<span class="token punctuation">:</span> <span class="token number">6</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> b<span class="token punctuation">:</span> <span class="token number">7</span> <span class="token punctuation">}</span><span class="token punctuation">]</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">[</span><span class="token string">'a'</span><span class="token punctuation">,</span> <span class="token string">'b'</span><span class="token punctuation">]</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'a,b\n"1","2"\n"3","4"\n"6",""\n"","7"'</span> |
|
<span class="token function">JSONtoCSV</span><span class="token punctuation">(</span> |
|
<span class="token punctuation">[</span><span class="token punctuation">{</span> a<span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span> b<span class="token punctuation">:</span> <span class="token number">2</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> a<span class="token punctuation">:</span> <span class="token number">3</span><span class="token punctuation">,</span> b<span class="token punctuation">:</span> <span class="token number">4</span><span class="token punctuation">,</span> c<span class="token punctuation">:</span> <span class="token number">5</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> a<span class="token punctuation">:</span> <span class="token number">6</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> b<span class="token punctuation">:</span> <span class="token number">7</span> <span class="token punctuation">}</span><span class="token punctuation">]</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">[</span><span class="token string">'a'</span><span class="token punctuation">,</span> <span class="token string">'b'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> |
|
<span class="token string">';'</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'a;b\n"1";"2"\n"3";"4"\n"6";""\n"";"7"'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: RGBToHSB">title: RGBToHSB</h2> |
|
<p>Converts a RGB color tuple to HSB format.</p> |
|
<ul> |
|
<li>Use the <a href="https://en.wikipedia.org/wiki/HSL_and_HSV#From_RGB">RGB to HSB conversion formula</a> to convert to the appropriate format.</li> |
|
<li>The range of all input parameters is [0, 255].</li> |
|
<li>The range of the resulting values is H: [0, 360], S: [0, 100], B: [0, 100].</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">RGBToHSB</span> <span class="token operator">=</span> <span class="token punctuation">(</span>r<span class="token punctuation">,</span> g<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
r <span class="token operator">/=</span> <span class="token number">255</span><span class="token punctuation">;</span> |
|
g <span class="token operator">/=</span> <span class="token number">255</span><span class="token punctuation">;</span> |
|
b <span class="token operator">/=</span> <span class="token number">255</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> v <span class="token operator">=</span> Math<span class="token punctuation">.</span><span class="token function">max</span><span class="token punctuation">(</span>r<span class="token punctuation">,</span> g<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">,</span> |
|
n <span class="token operator">=</span> v <span class="token operator">-</span> Math<span class="token punctuation">.</span><span class="token function">min</span><span class="token punctuation">(</span>r<span class="token punctuation">,</span> g<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> h <span class="token operator">=</span> |
|
n <span class="token operator">===</span> <span class="token number">0</span> <span class="token operator">?</span> <span class="token number">0</span> <span class="token punctuation">:</span> n <span class="token operator">&&</span> v <span class="token operator">===</span> r <span class="token operator">?</span> <span class="token punctuation">(</span>g <span class="token operator">-</span> b<span class="token punctuation">)</span> <span class="token operator">/</span> n <span class="token punctuation">:</span> v <span class="token operator">===</span> g <span class="token operator">?</span> <span class="token number">2</span> <span class="token operator">+</span> <span class="token punctuation">(</span>b <span class="token operator">-</span> r<span class="token punctuation">)</span> <span class="token operator">/</span> n <span class="token punctuation">:</span> <span class="token number">4</span> <span class="token operator">+</span> <span class="token punctuation">(</span>r <span class="token operator">-</span> g<span class="token punctuation">)</span> <span class="token operator">/</span> n<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> <span class="token punctuation">[</span><span class="token number">60</span> <span class="token operator">*</span> <span class="token punctuation">(</span>h <span class="token operator"><</span> <span class="token number">0</span> <span class="token operator">?</span> h <span class="token operator">+</span> <span class="token number">6</span> <span class="token punctuation">:</span> h<span class="token punctuation">)</span><span class="token punctuation">,</span> v <span class="token operator">&&</span> <span class="token punctuation">(</span>n <span class="token operator">/</span> v<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">100</span><span class="token punctuation">,</span> v <span class="token operator">*</span> <span class="token number">100</span><span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">RGBToHSB</span><span class="token punctuation">(</span><span class="token number">252</span><span class="token punctuation">,</span> <span class="token number">111</span><span class="token punctuation">,</span> <span class="token number">48</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// [18.529411764705856, 80.95238095238095, 98.82352941176471]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: RGBToHSL">title: RGBToHSL</h2> |
|
<p>Converts a RGB color tuple to HSL format.</p> |
|
<ul> |
|
<li>Use the <a href="https://www.niwa.nu/2013/05/math-behind-colorspace-conversions-rgb-hsl/">RGB to HSL conversion formula</a> to convert to the appropriate format.</li> |
|
<li>The range of all input parameters is [0, 255].</li> |
|
<li>The range of the resulting values is H: [0, 360], S: [0, 100], L: [0, 100].</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">RGBToHSL</span> <span class="token operator">=</span> <span class="token punctuation">(</span>r<span class="token punctuation">,</span> g<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
r <span class="token operator">/=</span> <span class="token number">255</span><span class="token punctuation">;</span> |
|
g <span class="token operator">/=</span> <span class="token number">255</span><span class="token punctuation">;</span> |
|
b <span class="token operator">/=</span> <span class="token number">255</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> l <span class="token operator">=</span> Math<span class="token punctuation">.</span><span class="token function">max</span><span class="token punctuation">(</span>r<span class="token punctuation">,</span> g<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> s <span class="token operator">=</span> l <span class="token operator">-</span> Math<span class="token punctuation">.</span><span class="token function">min</span><span class="token punctuation">(</span>r<span class="token punctuation">,</span> g<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> h <span class="token operator">=</span> s |
|
<span class="token operator">?</span> l <span class="token operator">===</span> r |
|
<span class="token operator">?</span> <span class="token punctuation">(</span>g <span class="token operator">-</span> b<span class="token punctuation">)</span> <span class="token operator">/</span> s |
|
<span class="token punctuation">:</span> l <span class="token operator">===</span> g |
|
<span class="token operator">?</span> <span class="token number">2</span> <span class="token operator">+</span> <span class="token punctuation">(</span>b <span class="token operator">-</span> r<span class="token punctuation">)</span> <span class="token operator">/</span> s |
|
<span class="token punctuation">:</span> <span class="token number">4</span> <span class="token operator">+</span> <span class="token punctuation">(</span>r <span class="token operator">-</span> g<span class="token punctuation">)</span> <span class="token operator">/</span> s |
|
<span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> <span class="token punctuation">[</span> |
|
<span class="token number">60</span> <span class="token operator">*</span> h <span class="token operator"><</span> <span class="token number">0</span> <span class="token operator">?</span> <span class="token number">60</span> <span class="token operator">*</span> h <span class="token operator">+</span> <span class="token number">360</span> <span class="token punctuation">:</span> <span class="token number">60</span> <span class="token operator">*</span> h<span class="token punctuation">,</span> |
|
<span class="token number">100</span> <span class="token operator">*</span> <span class="token punctuation">(</span>s <span class="token operator">?</span> <span class="token punctuation">(</span>l <span class="token operator"><=</span> <span class="token number">0.5</span> <span class="token operator">?</span> s <span class="token operator">/</span> <span class="token punctuation">(</span><span class="token number">2</span> <span class="token operator">*</span> l <span class="token operator">-</span> s<span class="token punctuation">)</span> <span class="token punctuation">:</span> s <span class="token operator">/</span> <span class="token punctuation">(</span><span class="token number">2</span> <span class="token operator">-</span> <span class="token punctuation">(</span><span class="token number">2</span> <span class="token operator">*</span> l <span class="token operator">-</span> s<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">(</span><span class="token number">100</span> <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">2</span> <span class="token operator">*</span> l <span class="token operator">-</span> s<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">RGBToHSL</span><span class="token punctuation">(</span><span class="token number">45</span><span class="token punctuation">,</span> <span class="token number">23</span><span class="token punctuation">,</span> <span class="token number">11</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [21.17647, 60.71428, 10.98039]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: RGBToHex">title: RGBToHex</h2> |
|
<p>Converts the values of RGB components to a hexadecimal color code.</p> |
|
<ul> |
|
<li>Convert given RGB parameters to hexadecimal string using bitwise left-shift operator (<code><<</code>) and <code>Number.prototype.toString(16)</code>.</li> |
|
<li>Use <code>String.prototype.padStart(6, '0')</code> to get a 6-digit hexadecimal value.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">RGBToHex</span> <span class="token operator">=</span> <span class="token punctuation">(</span>r<span class="token punctuation">,</span> g<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
<span class="token punctuation">(</span><span class="token punctuation">(</span>r <span class="token operator"><<</span> <span class="token number">16</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token punctuation">(</span>g <span class="token operator"><<</span> <span class="token number">8</span><span class="token punctuation">)</span> <span class="token operator">+</span> b<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token number">16</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span> <span class="token string">'0'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">RGBToHex</span><span class="token punctuation">(</span><span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">165</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'ffa501'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: URLJoin">title: URLJoin</h2> |
|
<p>Joins all given URL segments together, then normalizes the resulting URL.</p> |
|
<ul> |
|
<li>Use <code>String.prototype.join('/')</code> to combine URL segments.</li> |
|
<li>Use a series of <code>String.prototype.replace()</code> calls with various regexps to normalize the resulting URL (remove double slashes, add proper slashes for protocol, remove slashes before parameters, combine parameters with <code>'&'</code> and normalize first parameter delimiter).</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">URLJoin</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
args |
|
<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">'/'</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token regex">/[\/]+/g</span><span class="token punctuation">,</span> <span class="token string">'/'</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token regex">/^(.+):\//</span><span class="token punctuation">,</span> <span class="token string">'$1://'</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token regex">/^file:/</span><span class="token punctuation">,</span> <span class="token string">'file:/'</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token regex">/\/(\?|&|#[^!])/g</span><span class="token punctuation">,</span> <span class="token string">'$1'</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token regex">/\?/g</span><span class="token punctuation">,</span> <span class="token string">'&'</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token string">'&'</span><span class="token punctuation">,</span> <span class="token string">'?'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">URLJoin</span><span class="token punctuation">(</span><span class="token string">'http://www.google.com'</span><span class="token punctuation">,</span> <span class="token string">'a'</span><span class="token punctuation">,</span> <span class="token string">'/b/cd'</span><span class="token punctuation">,</span> <span class="token string">'?foo=123'</span><span class="token punctuation">,</span> <span class="token string">'?bar=foo'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// 'http://www.google.com/a/b/cd?foo=123&bar=foo'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: UUIDGeneratorBrowser">title: UUIDGeneratorBrowser</h2> |
|
<p>Generates a UUID in a browser.</p> |
|
<ul> |
|
<li>Use <code>Crypto.getRandomValues()</code> to generate a UUID, compliant with <a href="https://www.ietf.org/rfc/rfc4122.txt">RFC4122</a> version 4.</li> |
|
<li>Use <code>Number.prototype.toString(16)</code> to convert it to a proper UUID.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">UUIDGeneratorBrowser</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> |
|
<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1e7</span><span class="token punctuation">]</span> <span class="token operator">+</span> <span class="token operator">-</span><span class="token number">1e3</span> <span class="token operator">+</span> <span class="token operator">-</span><span class="token number">4e3</span> <span class="token operator">+</span> <span class="token operator">-</span><span class="token number">8e3</span> <span class="token operator">+</span> <span class="token operator">-</span><span class="token number">1e11</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token regex">/[018]/g</span><span class="token punctuation">,</span> c <span class="token operator">=></span> |
|
<span class="token punctuation">(</span> |
|
c <span class="token operator">^</span> |
|
<span class="token punctuation">(</span>crypto<span class="token punctuation">.</span><span class="token function">getRandomValues</span><span class="token punctuation">(</span><span class="token keyword keyword-new">new</span> <span class="token class-name">Uint8Array</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">&</span> <span class="token punctuation">(</span><span class="token number">15</span> <span class="token operator">>></span> <span class="token punctuation">(</span>c <span class="token operator">/</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token number">16</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">UUIDGeneratorBrowser</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '7982fcfe-5721-4632-bede-6000885be57d'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: UUIDGeneratorNode">title: UUIDGeneratorNode</h2> |
|
<p>Generates a UUID in Node.JS.</p> |
|
<ul> |
|
<li>Use <code>crypto.randomBytes()</code> to generate a UUID, compliant with <a href="https://www.ietf.org/rfc/rfc4122.txt">RFC4122</a> version 4.</li> |
|
<li>Use <code>Number.prototype.toString(16)</code> to convert it to a proper UUID.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> crypto <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'crypto'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
|
|
<span class="token keyword keyword-const">const</span> <span class="token function-variable function">UUIDGeneratorNode</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> |
|
<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1e7</span><span class="token punctuation">]</span> <span class="token operator">+</span> <span class="token operator">-</span><span class="token number">1e3</span> <span class="token operator">+</span> <span class="token operator">-</span><span class="token number">4e3</span> <span class="token operator">+</span> <span class="token operator">-</span><span class="token number">8e3</span> <span class="token operator">+</span> <span class="token operator">-</span><span class="token number">1e11</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token regex">/[018]/g</span><span class="token punctuation">,</span> c <span class="token operator">=></span> |
|
<span class="token punctuation">(</span>c <span class="token operator">^</span> <span class="token punctuation">(</span>crypto<span class="token punctuation">.</span><span class="token function">randomBytes</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">&</span> <span class="token punctuation">(</span><span class="token number">15</span> <span class="token operator">>></span> <span class="token punctuation">(</span>c <span class="token operator">/</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token number">16</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">UUIDGeneratorNode</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '79c7c136-60ee-40a2-beb2-856f1feabefc'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: accumulate">title: accumulate</h2> |
|
<p>Creates an array of partial sums.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.reduce()</code>, initialized with an empty array accumulator to iterate over <code>nums</code>.</li> |
|
<li>Use <code>Array.prototype.slice(-1)</code>, the spread operator (<code>...</code>) and the unary <code>+</code> operator to add each value to the accumulator array containing the previous sums.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">accumulate</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token operator">...</span>nums<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
nums<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span><span class="token punctuation">(</span>acc<span class="token punctuation">,</span> n<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">[</span><span class="token operator">...</span>acc<span class="token punctuation">,</span> n <span class="token operator">+</span> <span class="token operator">+</span>acc<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">accumulate</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [1, 3, 6, 10]</span> |
|
<span class="token function">accumulate</span><span class="token punctuation">(</span><span class="token operator">...</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [1, 3, 6, 10]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: addClass">title: addClass</h2> |
|
<p>Adds a class to an HTML element.</p> |
|
<ul> |
|
<li>Use <code>Element.classList</code> and <code>DOMTokenList.add()</code> to add the specified class to the element.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">addClass</span> <span class="token operator">=</span> <span class="token punctuation">(</span>el<span class="token punctuation">,</span> className<span class="token punctuation">)</span> <span class="token operator">=></span> el<span class="token punctuation">.</span>classList<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>className<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">addClass</span><span class="token punctuation">(</span>document<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span><span class="token string">'p'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">'special'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// The paragraph will now have the 'special' class</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: addDaysToDate">title: addDaysToDate</h2> |
|
<p>Calculates the date of <code>n</code> days from the given date, returning its string representation.</p> |
|
<ul> |
|
<li>Use <code>new Date()</code> to create a date object from the first argument.</li> |
|
<li>Use <code>Date.prototype.getDate()</code> and <code>Date.prototype.setDate()</code> to add <code>n</code> days to the given date.</li> |
|
<li>Use <code>Date.prototype.toISOString()</code> to return a string in <code>yyyy-mm-dd</code> format.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">addDaysToDate</span> <span class="token operator">=</span> <span class="token punctuation">(</span>date<span class="token punctuation">,</span> n<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> d <span class="token operator">=</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span>date<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
d<span class="token punctuation">.</span><span class="token function">setDate</span><span class="token punctuation">(</span>d<span class="token punctuation">.</span><span class="token function">getDate</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> n<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> d<span class="token punctuation">.</span><span class="token function">toISOString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span><span class="token string">'T'</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">addDaysToDate</span><span class="token punctuation">(</span><span class="token string">'2020-10-15'</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '2020-10-25'</span> |
|
<span class="token function">addDaysToDate</span><span class="token punctuation">(</span><span class="token string">'2020-10-15'</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '2020-10-05'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: addEventListenerAll">title: addEventListenerAll</h2> |
|
<p>Attaches an event listener to all the provided targets.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.forEach()</code> and <code>EventTarget.addEventListener()</code> to attach the provided <code>listener</code> for the given event <code>type</code> to all <code>targets</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">addEventListenerAll</span> <span class="token operator">=</span> <span class="token punctuation">(</span>targets<span class="token punctuation">,</span> type<span class="token punctuation">,</span> listener<span class="token punctuation">,</span> options<span class="token punctuation">,</span> useCapture<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
targets<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span>target <span class="token operator">=></span> |
|
target<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span>type<span class="token punctuation">,</span> listener<span class="token punctuation">,</span> options<span class="token punctuation">,</span> useCapture<span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">addEventListenerAll</span><span class="token punctuation">(</span>document<span class="token punctuation">.</span><span class="token function">querySelectorAll</span><span class="token punctuation">(</span><span class="token string">'a'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">'click'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> |
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'Clicked a link'</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// Logs 'Clicked a link' whenever any anchor element is clicked</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: addMinutesToDate">title: addMinutesToDate</h2> |
|
<p>Calculates the date of <code>n</code> minutes from the given date, returning its string representation.</p> |
|
<ul> |
|
<li>Use <code>new Date()</code> to create a date object from the first argument.</li> |
|
<li>Use <code>Date.prototype.getTime()</code> and <code>Date.prototype.setTime()</code> to add <code>n</code> minutes to the given date.</li> |
|
<li>Use <code>Date.prototype.toISOString()</code>, <code>String.prototype.split()</code> and <code>String.prototype.replace()</code> to return a string in <code>yyyy-mm-dd HH:MM:SS</code> format.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">addMinutesToDate</span> <span class="token operator">=</span> <span class="token punctuation">(</span>date<span class="token punctuation">,</span> n<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> d <span class="token operator">=</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span>date<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
d<span class="token punctuation">.</span><span class="token function">setTime</span><span class="token punctuation">(</span>d<span class="token punctuation">.</span><span class="token function">getTime</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> n <span class="token operator">*</span> <span class="token number">60000</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> d<span class="token punctuation">.</span><span class="token function">toISOString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span><span class="token string">'.'</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token string">'T'</span><span class="token punctuation">,</span><span class="token string">' '</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">addMinutesToDate</span><span class="token punctuation">(</span><span class="token string">'2020-10-19 12:00:00'</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '2020-10-19 12:10:00'</span> |
|
<span class="token function">addMinutesToDate</span><span class="token punctuation">(</span><span class="token string">'2020-10-19'</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '2020-10-18 23:50:00'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: addMultipleListeners">title: addMultipleListeners</h2> |
|
<p>Adds multiple event listeners with the same handler to an element.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.forEach()</code> and <code>EventTarget.addEventListener()</code> to add multiple event listeners with an assigned callback function to an element.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">addMultipleListeners</span> <span class="token operator">=</span> <span class="token punctuation">(</span>el<span class="token punctuation">,</span> types<span class="token punctuation">,</span> listener<span class="token punctuation">,</span> options<span class="token punctuation">,</span> useCapture<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
types<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span>type <span class="token operator">=></span> |
|
el<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span>type<span class="token punctuation">,</span> listener<span class="token punctuation">,</span> options<span class="token punctuation">,</span> useCapture<span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">addMultipleListeners</span><span class="token punctuation">(</span> |
|
document<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span><span class="token string">'.my-element'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">[</span><span class="token string">'click'</span><span class="token punctuation">,</span> <span class="token string">'mousedown'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'hello!'</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: addStyles">title: addStyles</h2> |
|
<p>Adds the provided styles to the given element.</p> |
|
<ul> |
|
<li>Use <code>Object.assign()</code> and <code>ElementCSSInlineStyle.style</code> to merge the provided <code>styles</code> object into the style of the given element.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">addStyles</span> <span class="token operator">=</span> <span class="token punctuation">(</span>el<span class="token punctuation">,</span> styles<span class="token punctuation">)</span> <span class="token operator">=></span> Object<span class="token punctuation">.</span><span class="token function">assign</span><span class="token punctuation">(</span>el<span class="token punctuation">.</span>style<span class="token punctuation">,</span> styles<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">addStyles</span><span class="token punctuation">(</span>document<span class="token punctuation">.</span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string">'my-element'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> |
|
background<span class="token punctuation">:</span> <span class="token string">'red'</span><span class="token punctuation">,</span> |
|
color<span class="token punctuation">:</span> <span class="token string">'#ffff00'</span><span class="token punctuation">,</span> |
|
fontSize<span class="token punctuation">:</span> <span class="token string">'3rem'</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: addWeekDays">title: addWeekDays</h2> |
|
<p>Calculates the date after adding the given number of business days.</p> |
|
<ul> |
|
<li>Use <code>Array.from()</code> to construct an array with <code>length</code> equal to the <code>count</code> of business days to be added.</li> |
|
<li>Use <code>Array.prototype.reduce()</code> to iterate over the array, starting from <code>startDate</code> and incrementing, using <code>Date.prototype.getDate()</code> and <code>Date.prototype.setDate()</code>.</li> |
|
<li>If the current <code>date</code> is on a weekend, update it again by adding either one day or two days to make it a weekday.</li> |
|
<li><strong>NOTE:</strong> Does not take official holidays into account.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">addWeekDays</span> <span class="token operator">=</span> <span class="token punctuation">(</span>startDate<span class="token punctuation">,</span> count<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
Array<span class="token punctuation">.</span><span class="token keyword keyword-from">from</span><span class="token punctuation">(</span><span class="token punctuation">{</span> length<span class="token punctuation">:</span> count <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span>date <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
date <span class="token operator">=</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span>date<span class="token punctuation">.</span><span class="token function">setDate</span><span class="token punctuation">(</span>date<span class="token punctuation">.</span><span class="token function">getDate</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>date<span class="token punctuation">.</span><span class="token function">getDay</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">6</span> <span class="token operator">===</span> <span class="token number">0</span><span class="token punctuation">)</span> |
|
date <span class="token operator">=</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span>date<span class="token punctuation">.</span><span class="token function">setDate</span><span class="token punctuation">(</span>date<span class="token punctuation">.</span><span class="token function">getDate</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token punctuation">(</span>date<span class="token punctuation">.</span><span class="token function">getDay</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token number">6</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> date<span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">,</span> startDate<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">addWeekDays</span><span class="token punctuation">(</span><span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token string">'Oct 09, 2020'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'Oct 16, 2020'</span> |
|
<span class="token function">addWeekDays</span><span class="token punctuation">(</span><span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token string">'Oct 12, 2020'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'Oct 19, 2020'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: all">title: all</h2> |
|
<p>Checks if the provided predicate function returns <code>true</code> for all elements in a collection.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.every()</code> to test if all elements in the collection return <code>true</code> based on <code>fn</code>.</li> |
|
<li>Omit the second argument, <code>fn</code>, to use <code>Boolean</code> as a default.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">all</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> fn <span class="token operator">=</span> Boolean<span class="token punctuation">)</span> <span class="token operator">=></span> arr<span class="token punctuation">.</span><span class="token function">every</span><span class="token punctuation">(</span>fn<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">all</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">,</span> x <span class="token operator">=></span> x <span class="token operator">></span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
<span class="token function">all</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: allEqual">title: allEqual</h2> |
|
<p>Checks if all elements in an array are equal.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.every()</code> to check if all the elements of the array are the same as the first one.</li> |
|
<li>Elements in the array are compared using the strict comparison operator, which does not account for <code>NaN</code> self-inequality.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">allEqual</span> <span class="token operator">=</span> arr <span class="token operator">=></span> arr<span class="token punctuation">.</span><span class="token function">every</span><span class="token punctuation">(</span>val <span class="token operator">=></span> val <span class="token operator">===</span> arr<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">allEqual</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> |
|
<span class="token function">allEqual</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: allEqualBy">title: allEqualBy</h2> |
|
<p>Checks if all elements in an array are equal, based on the provided mapping function.</p> |
|
<ul> |
|
<li>Apply <code>fn</code> to the first element of <code>arr</code>.</li> |
|
<li>Use <code>Array.prototype.every()</code> to check if <code>fn</code> returns the same value for all elements in the array as it did for the first one.</li> |
|
<li>Elements in the array are compared using the strict comparison operator, which does not account for <code>NaN</code> self-inequality.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">allEqualBy</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> fn<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> eql <span class="token operator">=</span> <span class="token function">fn</span><span class="token punctuation">(</span>arr<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> arr<span class="token punctuation">.</span><span class="token function">every</span><span class="token punctuation">(</span>val <span class="token operator">=></span> <span class="token function">fn</span><span class="token punctuation">(</span>val<span class="token punctuation">)</span> <span class="token operator">===</span> eql<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">allEqualBy</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1.1</span><span class="token punctuation">,</span> <span class="token number">1.2</span><span class="token punctuation">,</span> <span class="token number">1.3</span><span class="token punctuation">]</span><span class="token punctuation">,</span> Math<span class="token punctuation">.</span>round<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
<span class="token function">allEqualBy</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1.1</span><span class="token punctuation">,</span> <span class="token number">1.3</span><span class="token punctuation">,</span> <span class="token number">1.6</span><span class="token punctuation">]</span><span class="token punctuation">,</span> Math<span class="token punctuation">.</span>round<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: allUnique">title: allUnique</h2> |
|
<p>Checks if all elements in an array are unique.</p> |
|
<ul> |
|
<li>Create a new <code>Set</code> from the mapped values to keep only unique occurrences.</li> |
|
<li>Use <code>Array.prototype.length</code> and <code>Set.prototype.size</code> to compare the length of the unique values to the original array.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">allUnique</span> <span class="token operator">=</span> arr <span class="token operator">=></span> arr<span class="token punctuation">.</span>length <span class="token operator">===</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Set</span><span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token punctuation">.</span>size<span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">allUnique</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
<span class="token function">allUnique</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: allUniqueBy">title: allUniqueBy</h2> |
|
<p>Checks if all elements in an array are unique, based on the provided mapping function.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.map()</code> to apply <code>fn</code> to all elements in <code>arr</code>.</li> |
|
<li>Create a new <code>Set</code> from the mapped values to keep only unique occurrences.</li> |
|
<li>Use <code>Array.prototype.length</code> and <code>Set.prototype.size</code> to compare the length of the unique mapped values to the original array.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">allUniqueBy</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> fn<span class="token punctuation">)</span> <span class="token operator">=></span> arr<span class="token punctuation">.</span>length <span class="token operator">===</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Set</span><span class="token punctuation">(</span>arr<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>fn<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span>size<span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">allUniqueBy</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1.2</span><span class="token punctuation">,</span> <span class="token number">2.4</span><span class="token punctuation">,</span> <span class="token number">2.9</span><span class="token punctuation">]</span><span class="token punctuation">,</span> Math<span class="token punctuation">.</span>round<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
<span class="token function">allUniqueBy</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1.2</span><span class="token punctuation">,</span> <span class="token number">2.3</span><span class="token punctuation">,</span> <span class="token number">2.4</span><span class="token punctuation">]</span><span class="token punctuation">,</span> Math<span class="token punctuation">.</span>round<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: and<br> |
|
unlisted: true">title: and<br> |
|
unlisted: true</h2> |
|
<p>Checks if both arguments are <code>true</code>.</p> |
|
<ul> |
|
<li>Use the logical and (<code>&&</code>) operator on the two given values.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">and</span> <span class="token operator">=</span> <span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> a <span class="token operator">&&</span> b<span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">and</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
<span class="token function">and</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> |
|
<span class="token function">and</span><span class="token punctuation">(</span><span class="token boolean">false</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: any">title: any</h2> |
|
<p>Checks if the provided predicate function returns <code>true</code> for at least one element in a collection.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.some()</code> to test if any elements in the collection return <code>true</code> based on <code>fn</code>.</li> |
|
<li>Omit the second argument, <code>fn</code>, to use <code>Boolean</code> as a default.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">any</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> fn <span class="token operator">=</span> Boolean<span class="token punctuation">)</span> <span class="token operator">=></span> arr<span class="token punctuation">.</span><span class="token function">some</span><span class="token punctuation">(</span>fn<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">any</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> x <span class="token operator">=></span> x <span class="token operator">>=</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
<span class="token function">any</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: aperture">title: aperture</h2> |
|
<p>Creates an array of <code>n</code>-tuples of consecutive elements.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.slice()</code> and <code>Array.prototype.map()</code> to create an array of appropriate length.</li> |
|
<li>Populate the array with <code>n</code>-tuples of consecutive elements from <code>arr</code>.</li> |
|
<li>If <code>n</code> is greater than the length of <code>arr</code>, return an empty array.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">aperture</span> <span class="token operator">=</span> <span class="token punctuation">(</span>n<span class="token punctuation">,</span> arr<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
n <span class="token operator">></span> arr<span class="token punctuation">.</span>length |
|
<span class="token operator">?</span> <span class="token punctuation">[</span><span class="token punctuation">]</span> |
|
<span class="token punctuation">:</span> arr<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span>n <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token punctuation">(</span>v<span class="token punctuation">,</span> i<span class="token punctuation">)</span> <span class="token operator">=></span> arr<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span> i <span class="token operator">+</span> n<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">aperture</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [[1, 2], [2, 3], [3, 4]]</span> |
|
<span class="token function">aperture</span><span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [[1, 2, 3], [2, 3, 4]]</span> |
|
<span class="token function">aperture</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// []</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: approximatelyEqual">title: approximatelyEqual</h2> |
|
<p>Checks if two numbers are approximately equal to each other.</p> |
|
<ul> |
|
<li>Use <code>Math.abs()</code> to compare the absolute difference of the two values to <code>epsilon</code>.</li> |
|
<li>Omit the third argument, <code>epsilon</code>, to use a default value of <code>0.001</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">approximatelyEqual</span> <span class="token operator">=</span> <span class="token punctuation">(</span>v1<span class="token punctuation">,</span> v2<span class="token punctuation">,</span> epsilon <span class="token operator">=</span> <span class="token number">0.001</span><span class="token punctuation">)</span> <span class="token operator">=></span> |
|
Math<span class="token punctuation">.</span><span class="token function">abs</span><span class="token punctuation">(</span>v1 <span class="token operator">-</span> v2<span class="token punctuation">)</span> <span class="token operator"><</span> epsilon<span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">approximatelyEqual</span><span class="token punctuation">(</span>Math<span class="token punctuation">.</span><span class="token constant">PI</span> <span class="token operator">/</span> <span class="token number">2.0</span><span class="token punctuation">,</span> <span class="token number">1.5708</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: arithmeticProgression">title: arithmeticProgression</h2> |
|
<p>Creates an array of numbers in the arithmetic progression, starting with the given positive integer and up to the specified limit.</p> |
|
<ul> |
|
<li>Use <code>Array.from()</code> to create an array of the desired length, <code>lim/n</code>. Use a map function to fill it with the desired values in the given range.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">arithmeticProgression</span> <span class="token operator">=</span> <span class="token punctuation">(</span>n<span class="token punctuation">,</span> lim<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
Array<span class="token punctuation">.</span><span class="token keyword keyword-from">from</span><span class="token punctuation">(</span><span class="token punctuation">{</span> length<span class="token punctuation">:</span> Math<span class="token punctuation">.</span><span class="token function">ceil</span><span class="token punctuation">(</span>lim <span class="token operator">/</span> n<span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">(</span>_<span class="token punctuation">,</span> i<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span>i <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">*</span> n <span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">arithmeticProgression</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">25</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [5, 10, 15, 20, 25]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: arrayToCSV">title: arrayToCSV</h2> |
|
<p>Converts a 2D array to a comma-separated values (CSV) string.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.map()</code> and <code>Array.prototype.join(delimiter)</code> to combine individual 1D arrays (rows) into strings.</li> |
|
<li>Use <code>Array.prototype.join('\n')</code> to combine all rows into a CSV string, separating each row with a newline.</li> |
|
<li>Omit the second argument, <code>delimiter</code>, to use a default delimiter of <code>,</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> arrayToCSV <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> delimiter <span class="token operator">=</span> <span class="token string">','</span><span class="token punctuation">)</span> <span class="token operator">=></span> |
|
arr |
|
<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>v <span class="token operator">=></span> |
|
v<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>x <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token function">isNaN</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token operator">?</span> <span class="token template-string"><span class="token string">`"</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>x<span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token regex">/"/g</span><span class="token punctuation">,</span> <span class="token string">'""'</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">"`</span></span> <span class="token punctuation">:</span> x<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span>delimiter<span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">'\n'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">arrayToCSV</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">'a'</span><span class="token punctuation">,</span> <span class="token string">'b'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'c'</span><span class="token punctuation">,</span> <span class="token string">'d'</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '"a","b"\n"c","d"'</span> |
|
<span class="token function">arrayToCSV</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">'a'</span><span class="token punctuation">,</span> <span class="token string">'b'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'c'</span><span class="token punctuation">,</span> <span class="token string">'d'</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">';'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '"a";"b"\n"c";"d"'</span> |
|
<span class="token function">arrayToCSV</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">'a'</span><span class="token punctuation">,</span> <span class="token string">'"b" great'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'c'</span><span class="token punctuation">,</span> <span class="token number">3.1415</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// '"a","""b"" great"\n"c",3.1415'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: arrayToHTMLList">title: arrayToHTMLList</h2> |
|
<p>Converts the given array elements into <code><li></code> tags and appends them to the list of the given id.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.map()</code> and <code>Document.querySelector()</code> to create a list of html tags.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">arrayToHTMLList</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> listID<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
document<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span><span class="token template-string"><span class="token string">`#</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>listID<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">.</span>innerHTML <span class="token operator">+=</span> arr |
|
<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>item <span class="token operator">=></span> <span class="token template-string"><span class="token string">`<li></span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>item<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"></li>`</span></span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">arrayToHTMLList</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">'item 1'</span><span class="token punctuation">,</span> <span class="token string">'item 2'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">'myListID'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: ary">title: ary</h2> |
|
<p>Creates a function that accepts up to <code>n</code> arguments, ignoring any additional arguments.</p> |
|
<ul> |
|
<li>Call the provided function, <code>fn</code>, with up to <code>n</code> arguments, using <code>Array.prototype.slice(0, n)</code> and the spread operator (<code>...</code>).</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">ary</span> <span class="token operator">=</span> <span class="token punctuation">(</span>fn<span class="token punctuation">,</span> n<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token function">fn</span><span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> n<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> firstTwoMax <span class="token operator">=</span> <span class="token function">ary</span><span class="token punctuation">(</span>Math<span class="token punctuation">.</span>max<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token string">'a'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">10</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>x <span class="token operator">=></span> <span class="token function">firstTwoMax</span><span class="token punctuation">(</span><span class="token operator">...</span>x<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [6, 6, 10]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: assertValidKeys">title: assertValidKeys</h2> |
|
<p>Validates all keys in an object match the given <code>keys</code>.</p> |
|
<ul> |
|
<li>Use <code>Object.keys()</code> to get the keys of the given object, <code>obj</code>.</li> |
|
<li>Use <code>Array.prototype.every()</code> and <code>Array.prototype.includes()</code> to validate that each key in the object is specified in the <code>keys</code> array.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">assertValidKeys</span> <span class="token operator">=</span> <span class="token punctuation">(</span>obj<span class="token punctuation">,</span> keys<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
Object<span class="token punctuation">.</span><span class="token function">keys</span><span class="token punctuation">(</span>obj<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">every</span><span class="token punctuation">(</span>key <span class="token operator">=></span> keys<span class="token punctuation">.</span><span class="token function">includes</span><span class="token punctuation">(</span>key<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">assertValidKeys</span><span class="token punctuation">(</span><span class="token punctuation">{</span> id<span class="token punctuation">:</span> <span class="token number">10</span><span class="token punctuation">,</span> name<span class="token punctuation">:</span> <span class="token string">'apple'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'id'</span><span class="token punctuation">,</span> <span class="token string">'name'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
<span class="token function">assertValidKeys</span><span class="token punctuation">(</span><span class="token punctuation">{</span> id<span class="token punctuation">:</span> <span class="token number">10</span><span class="token punctuation">,</span> name<span class="token punctuation">:</span> <span class="token string">'apple'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'id'</span><span class="token punctuation">,</span> <span class="token string">'type'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: atob">title: atob</h2> |
|
<p>Decodes a string of data which has been encoded using base-64 encoding.</p> |
|
<ul> |
|
<li>Create a <code>Buffer</code> for the given string with base-64 encoding and use <code>Buffer.toString('binary')</code> to return the decoded string.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">atob</span> <span class="token operator">=</span> str <span class="token operator">=></span> Buffer<span class="token punctuation">.</span><span class="token keyword keyword-from">from</span><span class="token punctuation">(</span>str<span class="token punctuation">,</span> <span class="token string">'base64'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token string">'binary'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">atob</span><span class="token punctuation">(</span><span class="token string">'Zm9vYmFy'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'foobar'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: attempt">title: attempt</h2> |
|
<p>Attempts to invoke a function with the provided arguments, returning either the result or the caught error object.</p> |
|
<ul> |
|
<li>Use a <code>try... catch</code> block to return either the result of the function or an appropriate error.</li> |
|
<li>If the caught object is not an <code>Error</code>, use it to create a new <code>Error</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">attempt</span> <span class="token operator">=</span> <span class="token punctuation">(</span>fn<span class="token punctuation">,</span> <span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-try">try</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-return">return</span> <span class="token function">fn</span><span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> <span class="token keyword keyword-catch">catch</span> <span class="token punctuation">(</span><span class="token class-name">e</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-return">return</span> e <span class="token keyword keyword-instanceof">instanceof</span> <span class="token class-name">Error</span> <span class="token operator">?</span> e <span class="token punctuation">:</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Error</span><span class="token punctuation">(</span>e<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-let">let</span> elements <span class="token operator">=</span> <span class="token function">attempt</span><span class="token punctuation">(</span><span class="token keyword keyword-function">function</span><span class="token punctuation">(</span>selector<span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-return">return</span> document<span class="token punctuation">.</span><span class="token function">querySelectorAll</span><span class="token punctuation">(</span>selector<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">'>_>'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>elements <span class="token keyword keyword-instanceof">instanceof</span> <span class="token class-name">Error</span><span class="token punctuation">)</span> elements <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// elements = []</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: average">title: average</h2> |
|
<p>Calculates the average of two or more numbers.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.reduce()</code> to add each value to an accumulator, initialized with a value of <code>0</code>.</li> |
|
<li>Divide the resulting array by its length.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">average</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token operator">...</span>nums<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
nums<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span><span class="token punctuation">(</span>acc<span class="token punctuation">,</span> val<span class="token punctuation">)</span> <span class="token operator">=></span> acc <span class="token operator">+</span> val<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token operator">/</span> nums<span class="token punctuation">.</span>length<span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">average</span><span class="token punctuation">(</span><span class="token operator">...</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 2</span> |
|
<span class="token function">average</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 2</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: averageBy">title: averageBy</h2> |
|
<p>Calculates the average of an array, after mapping each element to a value using the provided function.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.map()</code> to map each element to the value returned by <code>fn</code>.</li> |
|
<li>Use <code>Array.prototype.reduce()</code> to add each value to an accumulator, initialized with a value of <code>0</code>.</li> |
|
<li>Divide the resulting array by its length.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">averageBy</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> fn<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
arr |
|
<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token keyword keyword-typeof">typeof</span> fn <span class="token operator">===</span> <span class="token string">'function'</span> <span class="token operator">?</span> fn <span class="token punctuation">:</span> val <span class="token operator">=></span> val<span class="token punctuation">[</span>fn<span class="token punctuation">]</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span><span class="token punctuation">(</span>acc<span class="token punctuation">,</span> val<span class="token punctuation">)</span> <span class="token operator">=></span> acc <span class="token operator">+</span> val<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token operator">/</span> arr<span class="token punctuation">.</span>length<span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">averageBy</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">{</span> n<span class="token punctuation">:</span> <span class="token number">4</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> n<span class="token punctuation">:</span> <span class="token number">2</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> n<span class="token punctuation">:</span> <span class="token number">8</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> n<span class="token punctuation">:</span> <span class="token number">6</span> <span class="token punctuation">}</span><span class="token punctuation">]</span><span class="token punctuation">,</span> o <span class="token operator">=></span> o<span class="token punctuation">.</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 5</span> |
|
<span class="token function">averageBy</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">{</span> n<span class="token punctuation">:</span> <span class="token number">4</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> n<span class="token punctuation">:</span> <span class="token number">2</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> n<span class="token punctuation">:</span> <span class="token number">8</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> n<span class="token punctuation">:</span> <span class="token number">6</span> <span class="token punctuation">}</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">'n'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 5</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: bifurcate">title: bifurcate</h2> |
|
<p>Splits values into two groups, based on the result of the given <code>filter</code> array.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.reduce()</code> and <code>Array.prototype.push()</code> to add elements to groups, based on <code>filter</code>.</li> |
|
<li>If <code>filter</code> has a truthy value for any element, add it to the first group, otherwise add it to the second group.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">bifurcate</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> filter<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
arr<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span><span class="token punctuation">(</span>acc<span class="token punctuation">,</span> val<span class="token punctuation">,</span> i<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span>acc<span class="token punctuation">[</span>filter<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">?</span> <span class="token number">0</span> <span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>val<span class="token punctuation">)</span><span class="token punctuation">,</span> acc<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">[</span> |
|
<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">bifurcate</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">'beep'</span><span class="token punctuation">,</span> <span class="token string">'boop'</span><span class="token punctuation">,</span> <span class="token string">'foo'</span><span class="token punctuation">,</span> <span class="token string">'bar'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// [ ['beep', 'boop', 'bar'], ['foo'] ]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: bifurcateBy">title: bifurcateBy</h2> |
|
<p>Splits values into two groups, based on the result of the given filtering function.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.reduce()</code> and <code>Array.prototype.push()</code> to add elements to groups, based on the value returned by <code>fn</code> for each element.</li> |
|
<li>If <code>fn</code> returns a truthy value for any element, add it to the first group, otherwise add it to the second group.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">bifurcateBy</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> fn<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
arr<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span><span class="token punctuation">(</span>acc<span class="token punctuation">,</span> val<span class="token punctuation">,</span> i<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span>acc<span class="token punctuation">[</span><span class="token function">fn</span><span class="token punctuation">(</span>val<span class="token punctuation">,</span> i<span class="token punctuation">)</span> <span class="token operator">?</span> <span class="token number">0</span> <span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>val<span class="token punctuation">)</span><span class="token punctuation">,</span> acc<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">[</span> |
|
<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">bifurcateBy</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">'beep'</span><span class="token punctuation">,</span> <span class="token string">'boop'</span><span class="token punctuation">,</span> <span class="token string">'foo'</span><span class="token punctuation">,</span> <span class="token string">'bar'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> x <span class="token operator">=></span> x<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">===</span> <span class="token string">'b'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// [ ['beep', 'boop', 'bar'], ['foo'] ]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: binary">title: binary</h2> |
|
<p>Creates a function that accepts up to two arguments, ignoring any additional arguments.</p> |
|
<ul> |
|
<li>Call the provided function, <code>fn</code>, with the first two arguments given.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">binary</span> <span class="token operator">=</span> fn <span class="token operator">=></span> <span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token function">fn</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token punctuation">[</span><span class="token string">'2'</span><span class="token punctuation">,</span> <span class="token string">'1'</span><span class="token punctuation">,</span> <span class="token string">'0'</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token function">binary</span><span class="token punctuation">(</span>Math<span class="token punctuation">.</span>max<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [2, 1, 2]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: binarySearch">title: binarySearch</h2> |
|
<p>Finds the index of a given element in a sorted array using the binary search algorithm.</p> |
|
<ul> |
|
<li>Declare the left and right search boundaries, <code>l</code> and <code>r</code>, initialized to <code>0</code> and the <code>length</code> of the array respectively.</li> |
|
<li>Use a <code>while</code> loop to repeatedly narrow down the search subarray, using <code>Math.floor()</code> to cut it in half.</li> |
|
<li>Return the index of the element if found, otherwise return <code>-1</code>.</li> |
|
<li><strong>Note:</strong> Does not account for duplicate values in the array.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">binarySearch</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> item<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-let">let</span> l <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> |
|
r <span class="token operator">=</span> arr<span class="token punctuation">.</span>length <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-while">while</span> <span class="token punctuation">(</span>l <span class="token operator"><=</span> r<span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> mid <span class="token operator">=</span> Math<span class="token punctuation">.</span><span class="token function">floor</span><span class="token punctuation">(</span><span class="token punctuation">(</span>l <span class="token operator">+</span> r<span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> guess <span class="token operator">=</span> arr<span class="token punctuation">[</span>mid<span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>guess <span class="token operator">===</span> item<span class="token punctuation">)</span> <span class="token keyword keyword-return">return</span> mid<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>guess <span class="token operator">></span> item<span class="token punctuation">)</span> r <span class="token operator">=</span> mid <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-else">else</span> l <span class="token operator">=</span> mid <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token keyword keyword-return">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">binarySearch</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 0</span> |
|
<span class="token function">binarySearch</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 4</span> |
|
<span class="token function">binarySearch</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// -1</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: bind">title: bind</h2> |
|
<p>Creates a function that invokes <code>fn</code> with a given context, optionally prepending any additional supplied parameters to the arguments.</p> |
|
<ul> |
|
<li>Return a <code>function</code> that uses <code>Function.prototype.apply()</code> to apply the given <code>context</code> to <code>fn</code>.</li> |
|
<li>Use the spread operator (<code>...</code>) to prepend any additional supplied parameters to the arguments.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">bind</span> <span class="token operator">=</span> <span class="token punctuation">(</span>fn<span class="token punctuation">,</span> context<span class="token punctuation">,</span> <span class="token operator">...</span>boundArgs<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
fn<span class="token punctuation">.</span><span class="token function">apply</span><span class="token punctuation">(</span>context<span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token operator">...</span>boundArgs<span class="token punctuation">,</span> <span class="token operator">...</span>args<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-function">function</span> <span class="token function">greet</span><span class="token punctuation">(</span>greeting<span class="token punctuation">,</span> punctuation<span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-return">return</span> greeting <span class="token operator">+</span> <span class="token string">' '</span> <span class="token operator">+</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span>user <span class="token operator">+</span> punctuation<span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token keyword keyword-const">const</span> freddy <span class="token operator">=</span> <span class="token punctuation">{</span> user<span class="token punctuation">:</span> <span class="token string">'fred'</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> freddyBound <span class="token operator">=</span> <span class="token function">bind</span><span class="token punctuation">(</span>greet<span class="token punctuation">,</span> freddy<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token function">freddyBound</span><span class="token punctuation">(</span><span class="token string">'hi'</span><span class="token punctuation">,</span> <span class="token string">'!'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'hi fred!'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: bindAll">title: bindAll</h2> |
|
<p>Binds methods of an object to the object itself, overwriting the existing method.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.forEach()</code> to iterate over the given <code>fns</code>.</li> |
|
<li>Return a function for each one, using <code>Function.prototype.apply()</code> to apply the given context (<code>obj</code>) to <code>fn</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">bindAll</span> <span class="token operator">=</span> <span class="token punctuation">(</span>obj<span class="token punctuation">,</span> <span class="token operator">...</span>fns<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
fns<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span> |
|
fn <span class="token operator">=></span> <span class="token punctuation">(</span> |
|
<span class="token punctuation">(</span>f <span class="token operator">=</span> obj<span class="token punctuation">[</span>fn<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">(</span>obj<span class="token punctuation">[</span>fn<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword keyword-function">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-return">return</span> f<span class="token punctuation">.</span><span class="token function">apply</span><span class="token punctuation">(</span>obj<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-let">let</span> view <span class="token operator">=</span> <span class="token punctuation">{</span> |
|
label<span class="token punctuation">:</span> <span class="token string">'docs'</span><span class="token punctuation">,</span> |
|
click<span class="token punctuation">:</span> <span class="token keyword keyword-function">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'clicked '</span> <span class="token operator">+</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span>label<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
<span class="token function">bindAll</span><span class="token punctuation">(</span>view<span class="token punctuation">,</span> <span class="token string">'click'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
document<span class="token punctuation">.</span>body<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> view<span class="token punctuation">.</span>click<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// Log 'clicked docs' when clicked.</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: bindKey">title: bindKey</h2> |
|
<p>Creates a function that invokes the method at a given key of an object, optionally prepending any additional supplied parameters to the arguments.</p> |
|
<ul> |
|
<li>Return a <code>function</code> that uses <code>Function.prototype.apply()</code> to bind <code>context[fn]</code> to <code>context</code>.</li> |
|
<li>Use the spread operator (<code>...</code>) to prepend any additional supplied parameters to the arguments.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">bindKey</span> <span class="token operator">=</span> <span class="token punctuation">(</span>context<span class="token punctuation">,</span> fn<span class="token punctuation">,</span> <span class="token operator">...</span>boundArgs<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
context<span class="token punctuation">[</span>fn<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">apply</span><span class="token punctuation">(</span>context<span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token operator">...</span>boundArgs<span class="token punctuation">,</span> <span class="token operator">...</span>args<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> freddy <span class="token operator">=</span> <span class="token punctuation">{</span> |
|
user<span class="token punctuation">:</span> <span class="token string">'fred'</span><span class="token punctuation">,</span> |
|
greet<span class="token punctuation">:</span> <span class="token keyword keyword-function">function</span><span class="token punctuation">(</span>greeting<span class="token punctuation">,</span> punctuation<span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-return">return</span> greeting <span class="token operator">+</span> <span class="token string">' '</span> <span class="token operator">+</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span>user <span class="token operator">+</span> punctuation<span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> freddyBound <span class="token operator">=</span> <span class="token function">bindKey</span><span class="token punctuation">(</span>freddy<span class="token punctuation">,</span> <span class="token string">'greet'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token function">freddyBound</span><span class="token punctuation">(</span><span class="token string">'hi'</span><span class="token punctuation">,</span> <span class="token string">'!'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'hi fred!'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: binomialCoefficient">title: binomialCoefficient</h2> |
|
<p>Calculates the number of ways to choose <code>k</code> items from <code>n</code> items without repetition and without order.</p> |
|
<ul> |
|
<li>Use <code>Number.isNaN()</code> to check if any of the two values is <code>NaN</code>.</li> |
|
<li>Check if <code>k</code> is less than <code>0</code>, greater than or equal to <code>n</code>, equal to <code>1</code> or <code>n - 1</code> and return the appropriate result.</li> |
|
<li>Check if <code>n - k</code> is less than <code>k</code> and switch their values accordingly.</li> |
|
<li>Loop from <code>2</code> through <code>k</code> and calculate the binomial coefficient.</li> |
|
<li>Use <code>Math.round()</code> to account for rounding errors in the calculation.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">binomialCoefficient</span> <span class="token operator">=</span> <span class="token punctuation">(</span>n<span class="token punctuation">,</span> k<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>Number<span class="token punctuation">.</span><span class="token function">isNaN</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span> <span class="token operator">||</span> Number<span class="token punctuation">.</span><span class="token function">isNaN</span><span class="token punctuation">(</span>k<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword keyword-return">return</span> <span class="token number">NaN</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>k <span class="token operator"><</span> <span class="token number">0</span> <span class="token operator">||</span> k <span class="token operator">></span> n<span class="token punctuation">)</span> <span class="token keyword keyword-return">return</span> <span class="token number">0</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>k <span class="token operator">===</span> <span class="token number">0</span> <span class="token operator">||</span> k <span class="token operator">===</span> n<span class="token punctuation">)</span> <span class="token keyword keyword-return">return</span> <span class="token number">1</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>k <span class="token operator">===</span> <span class="token number">1</span> <span class="token operator">||</span> k <span class="token operator">===</span> n <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token keyword keyword-return">return</span> n<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>n <span class="token operator">-</span> k <span class="token operator"><</span> k<span class="token punctuation">)</span> k <span class="token operator">=</span> n <span class="token operator">-</span> k<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-let">let</span> res <span class="token operator">=</span> n<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-for">for</span> <span class="token punctuation">(</span><span class="token keyword keyword-let">let</span> j <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">;</span> j <span class="token operator"><=</span> k<span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span> res <span class="token operator">*=</span> <span class="token punctuation">(</span>n <span class="token operator">-</span> j <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">/</span> j<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> Math<span class="token punctuation">.</span><span class="token function">round</span><span class="token punctuation">(</span>res<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">binomialCoefficient</span><span class="token punctuation">(</span><span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 28</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: both<br> |
|
unlisted: true">title: both<br> |
|
unlisted: true</h2> |
|
<p>Checks if both of the given functions return <code>true</code> for a given set of arguments.</p> |
|
<ul> |
|
<li>Use the logical and (<code>&&</code>) operator on the result of calling the two functions with the supplied <code>args</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">both</span> <span class="token operator">=</span> <span class="token punctuation">(</span>f<span class="token punctuation">,</span> g<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token function">f</span><span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">&&</span> <span class="token function">g</span><span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">isEven</span> <span class="token operator">=</span> num <span class="token operator">=></span> num <span class="token operator">%</span> <span class="token number">2</span> <span class="token operator">===</span> <span class="token number">0</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> <span class="token function-variable function">isPositive</span> <span class="token operator">=</span> num <span class="token operator">=></span> num <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> isPositiveEven <span class="token operator">=</span> <span class="token function">both</span><span class="token punctuation">(</span>isEven<span class="token punctuation">,</span> isPositive<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token function">isPositiveEven</span><span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
<span class="token function">isPositiveEven</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: HSBToRGB">title: HSBToRGB</h2> |
|
<p>Converts a HSB color tuple to RGB format.</p> |
|
<ul> |
|
<li>Use the <a href="https://en.wikipedia.org/wiki/HSL_and_HSV#HSV_to_RGB">HSB to RGB conversion formula</a> to convert to the appropriate format.</li> |
|
<li>The range of the input parameters is H: [0, 360], S: [0, 100], B: [0, 100].</li> |
|
<li>The range of all output values is [0, 255].</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">HSBToRGB</span> <span class="token operator">=</span> <span class="token punctuation">(</span>h<span class="token punctuation">,</span> s<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
s <span class="token operator">/=</span> <span class="token number">100</span><span class="token punctuation">;</span> |
|
b <span class="token operator">/=</span> <span class="token number">100</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> <span class="token function-variable function">k</span> <span class="token operator">=</span> <span class="token punctuation">(</span>n<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span>n <span class="token operator">+</span> h <span class="token operator">/</span> <span class="token number">60</span><span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">6</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> <span class="token function-variable function">f</span> <span class="token operator">=</span> <span class="token punctuation">(</span>n<span class="token punctuation">)</span> <span class="token operator">=></span> b <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> s <span class="token operator">*</span> Math<span class="token punctuation">.</span><span class="token function">max</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> Math<span class="token punctuation">.</span><span class="token function">min</span><span class="token punctuation">(</span><span class="token function">k</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">4</span> <span class="token operator">-</span> <span class="token function">k</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> <span class="token punctuation">[</span><span class="token number">255</span> <span class="token operator">*</span> <span class="token function">f</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">255</span> <span class="token operator">*</span> <span class="token function">f</span><span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">255</span> <span class="token operator">*</span> <span class="token function">f</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">HSBToRGB</span><span class="token punctuation">(</span><span class="token number">18</span><span class="token punctuation">,</span> <span class="token number">81</span><span class="token punctuation">,</span> <span class="token number">99</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [252.45, 109.31084999999996, 47.965499999999984]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: HSLToRGB">title: HSLToRGB</h2> |
|
<p>Converts a HSL color tuple to RGB format.</p> |
|
<ul> |
|
<li>Use the <a href="https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_RGB">HSL to RGB conversion formula</a> to convert to the appropriate format.</li> |
|
<li>The range of the input parameters is H: [0, 360], S: [0, 100], L: [0, 100].</li> |
|
<li>The range of all output values is [0, 255].</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">HSLToRGB</span> <span class="token operator">=</span> <span class="token punctuation">(</span>h<span class="token punctuation">,</span> s<span class="token punctuation">,</span> l<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
s <span class="token operator">/=</span> <span class="token number">100</span><span class="token punctuation">;</span> |
|
l <span class="token operator">/=</span> <span class="token number">100</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> <span class="token function-variable function">k</span> <span class="token operator">=</span> n <span class="token operator">=></span> <span class="token punctuation">(</span>n <span class="token operator">+</span> h <span class="token operator">/</span> <span class="token number">30</span><span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">12</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> a <span class="token operator">=</span> s <span class="token operator">*</span> Math<span class="token punctuation">.</span><span class="token function">min</span><span class="token punctuation">(</span>l<span class="token punctuation">,</span> <span class="token number">1</span> <span class="token operator">-</span> l<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> <span class="token function-variable function">f</span> <span class="token operator">=</span> n <span class="token operator">=></span> |
|
l <span class="token operator">-</span> a <span class="token operator">*</span> Math<span class="token punctuation">.</span><span class="token function">max</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> Math<span class="token punctuation">.</span><span class="token function">min</span><span class="token punctuation">(</span><span class="token function">k</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token number">3</span><span class="token punctuation">,</span> Math<span class="token punctuation">.</span><span class="token function">min</span><span class="token punctuation">(</span><span class="token number">9</span> <span class="token operator">-</span> <span class="token function">k</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> <span class="token punctuation">[</span><span class="token number">255</span> <span class="token operator">*</span> <span class="token function">f</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">255</span> <span class="token operator">*</span> <span class="token function">f</span><span class="token punctuation">(</span><span class="token number">8</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">255</span> <span class="token operator">*</span> <span class="token function">f</span><span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">HSLToRGB</span><span class="token punctuation">(</span><span class="token number">13</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">11</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [56.1, 12.155, 0]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: JSONToFile">title: JSONToFile</h2> |
|
<p>Writes a JSON object to a file.</p> |
|
<ul> |
|
<li>Use <code>fs.writeFileSync()</code>, template literals and <code>JSON.stringify()</code> to write a <code>json</code> object to a <code>.json</code> file.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> fs <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'fs'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
|
|
<span class="token keyword keyword-const">const</span> <span class="token function-variable function">JSONToFile</span> <span class="token operator">=</span> <span class="token punctuation">(</span>obj<span class="token punctuation">,</span> filename<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
fs<span class="token punctuation">.</span><span class="token function">writeFileSync</span><span class="token punctuation">(</span><span class="token template-string"><span class="token string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>filename<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">.json`</span></span><span class="token punctuation">,</span> <span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">stringify</span><span class="token punctuation">(</span>obj<span class="token punctuation">,</span> <span class="token keyword keyword-null">null</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">JSONToFile</span><span class="token punctuation">(</span><span class="token punctuation">{</span> test<span class="token punctuation">:</span> <span class="token string">'is passed'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">'testJsonFile'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// writes the object to 'testJsonFile.json'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: JSONtoCSV">title: JSONtoCSV</h2> |
|
<p>Converts an array of objects to a comma-separated values (CSV) string that contains only the <code>columns</code> specified.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.join(delimiter)</code> to combine all the names in <code>columns</code> to create the first row.</li> |
|
<li>Use <code>Array.prototype.map()</code> and <code>Array.prototype.reduce()</code> to create a row for each object. Substitute non-existent values with empty strings and only mapping values in <code>columns</code>.</li> |
|
<li>Use <code>Array.prototype.join('\n')</code> to combine all rows into a string.</li> |
|
<li>Omit the third argument, <code>delimiter</code>, to use a default delimiter of <code>','</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> JSONtoCSV <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> columns<span class="token punctuation">,</span> delimiter <span class="token operator">=</span> <span class="token string">','</span><span class="token punctuation">)</span> <span class="token operator">=></span> |
|
<span class="token punctuation">[</span> |
|
columns<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span>delimiter<span class="token punctuation">)</span><span class="token punctuation">,</span> |
|
<span class="token operator">...</span>arr<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>obj <span class="token operator">=></span> |
|
columns<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span> |
|
<span class="token punctuation">(</span>acc<span class="token punctuation">,</span> key<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
<span class="token template-string"><span class="token string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>acc<span class="token interpolation-punctuation punctuation">}</span></span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span><span class="token operator">!</span>acc<span class="token punctuation">.</span>length <span class="token operator">?</span> <span class="token string">''</span> <span class="token punctuation">:</span> delimiter<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">"</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span><span class="token operator">!</span>obj<span class="token punctuation">[</span>key<span class="token punctuation">]</span> <span class="token operator">?</span> <span class="token string">''</span> <span class="token punctuation">:</span> obj<span class="token punctuation">[</span>key<span class="token punctuation">]</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">"`</span></span><span class="token punctuation">,</span> |
|
<span class="token string">''</span> |
|
<span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">'\n'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">JSONtoCSV</span><span class="token punctuation">(</span> |
|
<span class="token punctuation">[</span><span class="token punctuation">{</span> a<span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span> b<span class="token punctuation">:</span> <span class="token number">2</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> a<span class="token punctuation">:</span> <span class="token number">3</span><span class="token punctuation">,</span> b<span class="token punctuation">:</span> <span class="token number">4</span><span class="token punctuation">,</span> c<span class="token punctuation">:</span> <span class="token number">5</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> a<span class="token punctuation">:</span> <span class="token number">6</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> b<span class="token punctuation">:</span> <span class="token number">7</span> <span class="token punctuation">}</span><span class="token punctuation">]</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">[</span><span class="token string">'a'</span><span class="token punctuation">,</span> <span class="token string">'b'</span><span class="token punctuation">]</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'a,b\n"1","2"\n"3","4"\n"6",""\n"","7"'</span> |
|
<span class="token function">JSONtoCSV</span><span class="token punctuation">(</span> |
|
<span class="token punctuation">[</span><span class="token punctuation">{</span> a<span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span> b<span class="token punctuation">:</span> <span class="token number">2</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> a<span class="token punctuation">:</span> <span class="token number">3</span><span class="token punctuation">,</span> b<span class="token punctuation">:</span> <span class="token number">4</span><span class="token punctuation">,</span> c<span class="token punctuation">:</span> <span class="token number">5</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> a<span class="token punctuation">:</span> <span class="token number">6</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> b<span class="token punctuation">:</span> <span class="token number">7</span> <span class="token punctuation">}</span><span class="token punctuation">]</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">[</span><span class="token string">'a'</span><span class="token punctuation">,</span> <span class="token string">'b'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> |
|
<span class="token string">';'</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'a;b\n"1";"2"\n"3";"4"\n"6";""\n"";"7"'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: RGBToHSB">title: RGBToHSB</h2> |
|
<p>Converts a RGB color tuple to HSB format.</p> |
|
<ul> |
|
<li>Use the <a href="https://en.wikipedia.org/wiki/HSL_and_HSV#From_RGB">RGB to HSB conversion formula</a> to convert to the appropriate format.</li> |
|
<li>The range of all input parameters is [0, 255].</li> |
|
<li>The range of the resulting values is H: [0, 360], S: [0, 100], B: [0, 100].</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">RGBToHSB</span> <span class="token operator">=</span> <span class="token punctuation">(</span>r<span class="token punctuation">,</span> g<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
r <span class="token operator">/=</span> <span class="token number">255</span><span class="token punctuation">;</span> |
|
g <span class="token operator">/=</span> <span class="token number">255</span><span class="token punctuation">;</span> |
|
b <span class="token operator">/=</span> <span class="token number">255</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> v <span class="token operator">=</span> Math<span class="token punctuation">.</span><span class="token function">max</span><span class="token punctuation">(</span>r<span class="token punctuation">,</span> g<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">,</span> |
|
n <span class="token operator">=</span> v <span class="token operator">-</span> Math<span class="token punctuation">.</span><span class="token function">min</span><span class="token punctuation">(</span>r<span class="token punctuation">,</span> g<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> h <span class="token operator">=</span> |
|
n <span class="token operator">===</span> <span class="token number">0</span> <span class="token operator">?</span> <span class="token number">0</span> <span class="token punctuation">:</span> n <span class="token operator">&&</span> v <span class="token operator">===</span> r <span class="token operator">?</span> <span class="token punctuation">(</span>g <span class="token operator">-</span> b<span class="token punctuation">)</span> <span class="token operator">/</span> n <span class="token punctuation">:</span> v <span class="token operator">===</span> g <span class="token operator">?</span> <span class="token number">2</span> <span class="token operator">+</span> <span class="token punctuation">(</span>b <span class="token operator">-</span> r<span class="token punctuation">)</span> <span class="token operator">/</span> n <span class="token punctuation">:</span> <span class="token number">4</span> <span class="token operator">+</span> <span class="token punctuation">(</span>r <span class="token operator">-</span> g<span class="token punctuation">)</span> <span class="token operator">/</span> n<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> <span class="token punctuation">[</span><span class="token number">60</span> <span class="token operator">*</span> <span class="token punctuation">(</span>h <span class="token operator"><</span> <span class="token number">0</span> <span class="token operator">?</span> h <span class="token operator">+</span> <span class="token number">6</span> <span class="token punctuation">:</span> h<span class="token punctuation">)</span><span class="token punctuation">,</span> v <span class="token operator">&&</span> <span class="token punctuation">(</span>n <span class="token operator">/</span> v<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">100</span><span class="token punctuation">,</span> v <span class="token operator">*</span> <span class="token number">100</span><span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">RGBToHSB</span><span class="token punctuation">(</span><span class="token number">252</span><span class="token punctuation">,</span> <span class="token number">111</span><span class="token punctuation">,</span> <span class="token number">48</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// [18.529411764705856, 80.95238095238095, 98.82352941176471]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: RGBToHSL">title: RGBToHSL</h2> |
|
<p>Converts a RGB color tuple to HSL format.</p> |
|
<ul> |
|
<li>Use the <a href="https://www.niwa.nu/2013/05/math-behind-colorspace-conversions-rgb-hsl/">RGB to HSL conversion formula</a> to convert to the appropriate format.</li> |
|
<li>The range of all input parameters is [0, 255].</li> |
|
<li>The range of the resulting values is H: [0, 360], S: [0, 100], L: [0, 100].</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">RGBToHSL</span> <span class="token operator">=</span> <span class="token punctuation">(</span>r<span class="token punctuation">,</span> g<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
r <span class="token operator">/=</span> <span class="token number">255</span><span class="token punctuation">;</span> |
|
g <span class="token operator">/=</span> <span class="token number">255</span><span class="token punctuation">;</span> |
|
b <span class="token operator">/=</span> <span class="token number">255</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> l <span class="token operator">=</span> Math<span class="token punctuation">.</span><span class="token function">max</span><span class="token punctuation">(</span>r<span class="token punctuation">,</span> g<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> s <span class="token operator">=</span> l <span class="token operator">-</span> Math<span class="token punctuation">.</span><span class="token function">min</span><span class="token punctuation">(</span>r<span class="token punctuation">,</span> g<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> h <span class="token operator">=</span> s |
|
<span class="token operator">?</span> l <span class="token operator">===</span> r |
|
<span class="token operator">?</span> <span class="token punctuation">(</span>g <span class="token operator">-</span> b<span class="token punctuation">)</span> <span class="token operator">/</span> s |
|
<span class="token punctuation">:</span> l <span class="token operator">===</span> g |
|
<span class="token operator">?</span> <span class="token number">2</span> <span class="token operator">+</span> <span class="token punctuation">(</span>b <span class="token operator">-</span> r<span class="token punctuation">)</span> <span class="token operator">/</span> s |
|
<span class="token punctuation">:</span> <span class="token number">4</span> <span class="token operator">+</span> <span class="token punctuation">(</span>r <span class="token operator">-</span> g<span class="token punctuation">)</span> <span class="token operator">/</span> s |
|
<span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> <span class="token punctuation">[</span> |
|
<span class="token number">60</span> <span class="token operator">*</span> h <span class="token operator"><</span> <span class="token number">0</span> <span class="token operator">?</span> <span class="token number">60</span> <span class="token operator">*</span> h <span class="token operator">+</span> <span class="token number">360</span> <span class="token punctuation">:</span> <span class="token number">60</span> <span class="token operator">*</span> h<span class="token punctuation">,</span> |
|
<span class="token number">100</span> <span class="token operator">*</span> <span class="token punctuation">(</span>s <span class="token operator">?</span> <span class="token punctuation">(</span>l <span class="token operator"><=</span> <span class="token number">0.5</span> <span class="token operator">?</span> s <span class="token operator">/</span> <span class="token punctuation">(</span><span class="token number">2</span> <span class="token operator">*</span> l <span class="token operator">-</span> s<span class="token punctuation">)</span> <span class="token punctuation">:</span> s <span class="token operator">/</span> <span class="token punctuation">(</span><span class="token number">2</span> <span class="token operator">-</span> <span class="token punctuation">(</span><span class="token number">2</span> <span class="token operator">*</span> l <span class="token operator">-</span> s<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">(</span><span class="token number">100</span> <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">2</span> <span class="token operator">*</span> l <span class="token operator">-</span> s<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">RGBToHSL</span><span class="token punctuation">(</span><span class="token number">45</span><span class="token punctuation">,</span> <span class="token number">23</span><span class="token punctuation">,</span> <span class="token number">11</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [21.17647, 60.71428, 10.98039]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: RGBToHex">title: RGBToHex</h2> |
|
<p>Converts the values of RGB components to a hexadecimal color code.</p> |
|
<ul> |
|
<li>Convert given RGB parameters to hexadecimal string using bitwise left-shift operator (<code><<</code>) and <code>Number.prototype.toString(16)</code>.</li> |
|
<li>Use <code>String.prototype.padStart(6, '0')</code> to get a 6-digit hexadecimal value.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">RGBToHex</span> <span class="token operator">=</span> <span class="token punctuation">(</span>r<span class="token punctuation">,</span> g<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
<span class="token punctuation">(</span><span class="token punctuation">(</span>r <span class="token operator"><<</span> <span class="token number">16</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token punctuation">(</span>g <span class="token operator"><<</span> <span class="token number">8</span><span class="token punctuation">)</span> <span class="token operator">+</span> b<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token number">16</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span> <span class="token string">'0'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">RGBToHex</span><span class="token punctuation">(</span><span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">165</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'ffa501'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: URLJoin">title: URLJoin</h2> |
|
<p>Joins all given URL segments together, then normalizes the resulting URL.</p> |
|
<ul> |
|
<li>Use <code>String.prototype.join('/')</code> to combine URL segments.</li> |
|
<li>Use a series of <code>String.prototype.replace()</code> calls with various regexps to normalize the resulting URL (remove double slashes, add proper slashes for protocol, remove slashes before parameters, combine parameters with <code>'&'</code> and normalize first parameter delimiter).</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">URLJoin</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
args |
|
<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">'/'</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token regex">/[\/]+/g</span><span class="token punctuation">,</span> <span class="token string">'/'</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token regex">/^(.+):\//</span><span class="token punctuation">,</span> <span class="token string">'$1://'</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token regex">/^file:/</span><span class="token punctuation">,</span> <span class="token string">'file:/'</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token regex">/\/(\?|&|#[^!])/g</span><span class="token punctuation">,</span> <span class="token string">'$1'</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token regex">/\?/g</span><span class="token punctuation">,</span> <span class="token string">'&'</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token string">'&'</span><span class="token punctuation">,</span> <span class="token string">'?'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">URLJoin</span><span class="token punctuation">(</span><span class="token string">'http://www.google.com'</span><span class="token punctuation">,</span> <span class="token string">'a'</span><span class="token punctuation">,</span> <span class="token string">'/b/cd'</span><span class="token punctuation">,</span> <span class="token string">'?foo=123'</span><span class="token punctuation">,</span> <span class="token string">'?bar=foo'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// 'http://www.google.com/a/b/cd?foo=123&bar=foo'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: UUIDGeneratorBrowser">title: UUIDGeneratorBrowser</h2> |
|
<p>Generates a UUID in a browser.</p> |
|
<ul> |
|
<li>Use <code>Crypto.getRandomValues()</code> to generate a UUID, compliant with <a href="https://www.ietf.org/rfc/rfc4122.txt">RFC4122</a> version 4.</li> |
|
<li>Use <code>Number.prototype.toString(16)</code> to convert it to a proper UUID.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">UUIDGeneratorBrowser</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> |
|
<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1e7</span><span class="token punctuation">]</span> <span class="token operator">+</span> <span class="token operator">-</span><span class="token number">1e3</span> <span class="token operator">+</span> <span class="token operator">-</span><span class="token number">4e3</span> <span class="token operator">+</span> <span class="token operator">-</span><span class="token number">8e3</span> <span class="token operator">+</span> <span class="token operator">-</span><span class="token number">1e11</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token regex">/[018]/g</span><span class="token punctuation">,</span> c <span class="token operator">=></span> |
|
<span class="token punctuation">(</span> |
|
c <span class="token operator">^</span> |
|
<span class="token punctuation">(</span>crypto<span class="token punctuation">.</span><span class="token function">getRandomValues</span><span class="token punctuation">(</span><span class="token keyword keyword-new">new</span> <span class="token class-name">Uint8Array</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">&</span> <span class="token punctuation">(</span><span class="token number">15</span> <span class="token operator">>></span> <span class="token punctuation">(</span>c <span class="token operator">/</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token number">16</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">UUIDGeneratorBrowser</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '7982fcfe-5721-4632-bede-6000885be57d'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: UUIDGeneratorNode">title: UUIDGeneratorNode</h2> |
|
<p>Generates a UUID in Node.JS.</p> |
|
<ul> |
|
<li>Use <code>crypto.randomBytes()</code> to generate a UUID, compliant with <a href="https://www.ietf.org/rfc/rfc4122.txt">RFC4122</a> version 4.</li> |
|
<li>Use <code>Number.prototype.toString(16)</code> to convert it to a proper UUID.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> crypto <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'crypto'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
|
|
<span class="token keyword keyword-const">const</span> <span class="token function-variable function">UUIDGeneratorNode</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> |
|
<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1e7</span><span class="token punctuation">]</span> <span class="token operator">+</span> <span class="token operator">-</span><span class="token number">1e3</span> <span class="token operator">+</span> <span class="token operator">-</span><span class="token number">4e3</span> <span class="token operator">+</span> <span class="token operator">-</span><span class="token number">8e3</span> <span class="token operator">+</span> <span class="token operator">-</span><span class="token number">1e11</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token regex">/[018]/g</span><span class="token punctuation">,</span> c <span class="token operator">=></span> |
|
<span class="token punctuation">(</span>c <span class="token operator">^</span> <span class="token punctuation">(</span>crypto<span class="token punctuation">.</span><span class="token function">randomBytes</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">&</span> <span class="token punctuation">(</span><span class="token number">15</span> <span class="token operator">>></span> <span class="token punctuation">(</span>c <span class="token operator">/</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token number">16</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">UUIDGeneratorNode</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '79c7c136-60ee-40a2-beb2-856f1feabefc'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: accumulate">title: accumulate</h2> |
|
<p>Creates an array of partial sums.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.reduce()</code>, initialized with an empty array accumulator to iterate over <code>nums</code>.</li> |
|
<li>Use <code>Array.prototype.slice(-1)</code>, the spread operator (<code>...</code>) and the unary <code>+</code> operator to add each value to the accumulator array containing the previous sums.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">accumulate</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token operator">...</span>nums<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
nums<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span><span class="token punctuation">(</span>acc<span class="token punctuation">,</span> n<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">[</span><span class="token operator">...</span>acc<span class="token punctuation">,</span> n <span class="token operator">+</span> <span class="token operator">+</span>acc<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">accumulate</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [1, 3, 6, 10]</span> |
|
<span class="token function">accumulate</span><span class="token punctuation">(</span><span class="token operator">...</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [1, 3, 6, 10]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: addClass">title: addClass</h2> |
|
<p>Adds a class to an HTML element.</p> |
|
<ul> |
|
<li>Use <code>Element.classList</code> and <code>DOMTokenList.add()</code> to add the specified class to the element.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">addClass</span> <span class="token operator">=</span> <span class="token punctuation">(</span>el<span class="token punctuation">,</span> className<span class="token punctuation">)</span> <span class="token operator">=></span> el<span class="token punctuation">.</span>classList<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>className<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">addClass</span><span class="token punctuation">(</span>document<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span><span class="token string">'p'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">'special'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// The paragraph will now have the 'special' class</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: addDaysToDate">title: addDaysToDate</h2> |
|
<p>Calculates the date of <code>n</code> days from the given date, returning its string representation.</p> |
|
<ul> |
|
<li>Use <code>new Date()</code> to create a date object from the first argument.</li> |
|
<li>Use <code>Date.prototype.getDate()</code> and <code>Date.prototype.setDate()</code> to add <code>n</code> days to the given date.</li> |
|
<li>Use <code>Date.prototype.toISOString()</code> to return a string in <code>yyyy-mm-dd</code> format.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">addDaysToDate</span> <span class="token operator">=</span> <span class="token punctuation">(</span>date<span class="token punctuation">,</span> n<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> d <span class="token operator">=</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span>date<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
d<span class="token punctuation">.</span><span class="token function">setDate</span><span class="token punctuation">(</span>d<span class="token punctuation">.</span><span class="token function">getDate</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> n<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> d<span class="token punctuation">.</span><span class="token function">toISOString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span><span class="token string">'T'</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">addDaysToDate</span><span class="token punctuation">(</span><span class="token string">'2020-10-15'</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '2020-10-25'</span> |
|
<span class="token function">addDaysToDate</span><span class="token punctuation">(</span><span class="token string">'2020-10-15'</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '2020-10-05'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: addEventListenerAll">title: addEventListenerAll</h2> |
|
<p>Attaches an event listener to all the provided targets.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.forEach()</code> and <code>EventTarget.addEventListener()</code> to attach the provided <code>listener</code> for the given event <code>type</code> to all <code>targets</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">addEventListenerAll</span> <span class="token operator">=</span> <span class="token punctuation">(</span>targets<span class="token punctuation">,</span> type<span class="token punctuation">,</span> listener<span class="token punctuation">,</span> options<span class="token punctuation">,</span> useCapture<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
targets<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span>target <span class="token operator">=></span> |
|
target<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span>type<span class="token punctuation">,</span> listener<span class="token punctuation">,</span> options<span class="token punctuation">,</span> useCapture<span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">addEventListenerAll</span><span class="token punctuation">(</span>document<span class="token punctuation">.</span><span class="token function">querySelectorAll</span><span class="token punctuation">(</span><span class="token string">'a'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">'click'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> |
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'Clicked a link'</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// Logs 'Clicked a link' whenever any anchor element is clicked</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: addMinutesToDate">title: addMinutesToDate</h2> |
|
<p>Calculates the date of <code>n</code> minutes from the given date, returning its string representation.</p> |
|
<ul> |
|
<li>Use <code>new Date()</code> to create a date object from the first argument.</li> |
|
<li>Use <code>Date.prototype.getTime()</code> and <code>Date.prototype.setTime()</code> to add <code>n</code> minutes to the given date.</li> |
|
<li>Use <code>Date.prototype.toISOString()</code>, <code>String.prototype.split()</code> and <code>String.prototype.replace()</code> to return a string in <code>yyyy-mm-dd HH:MM:SS</code> format.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">addMinutesToDate</span> <span class="token operator">=</span> <span class="token punctuation">(</span>date<span class="token punctuation">,</span> n<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> d <span class="token operator">=</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span>date<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
d<span class="token punctuation">.</span><span class="token function">setTime</span><span class="token punctuation">(</span>d<span class="token punctuation">.</span><span class="token function">getTime</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> n <span class="token operator">*</span> <span class="token number">60000</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> d<span class="token punctuation">.</span><span class="token function">toISOString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span><span class="token string">'.'</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token string">'T'</span><span class="token punctuation">,</span><span class="token string">' '</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">addMinutesToDate</span><span class="token punctuation">(</span><span class="token string">'2020-10-19 12:00:00'</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '2020-10-19 12:10:00'</span> |
|
<span class="token function">addMinutesToDate</span><span class="token punctuation">(</span><span class="token string">'2020-10-19'</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '2020-10-18 23:50:00'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: addMultipleListeners">title: addMultipleListeners</h2> |
|
<p>Adds multiple event listeners with the same handler to an element.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.forEach()</code> and <code>EventTarget.addEventListener()</code> to add multiple event listeners with an assigned callback function to an element.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">addMultipleListeners</span> <span class="token operator">=</span> <span class="token punctuation">(</span>el<span class="token punctuation">,</span> types<span class="token punctuation">,</span> listener<span class="token punctuation">,</span> options<span class="token punctuation">,</span> useCapture<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
types<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span>type <span class="token operator">=></span> |
|
el<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span>type<span class="token punctuation">,</span> listener<span class="token punctuation">,</span> options<span class="token punctuation">,</span> useCapture<span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">addMultipleListeners</span><span class="token punctuation">(</span> |
|
document<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span><span class="token string">'.my-element'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">[</span><span class="token string">'click'</span><span class="token punctuation">,</span> <span class="token string">'mousedown'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'hello!'</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: addStyles">title: addStyles</h2> |
|
<p>Adds the provided styles to the given element.</p> |
|
<ul> |
|
<li>Use <code>Object.assign()</code> and <code>ElementCSSInlineStyle.style</code> to merge the provided <code>styles</code> object into the style of the given element.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">addStyles</span> <span class="token operator">=</span> <span class="token punctuation">(</span>el<span class="token punctuation">,</span> styles<span class="token punctuation">)</span> <span class="token operator">=></span> Object<span class="token punctuation">.</span><span class="token function">assign</span><span class="token punctuation">(</span>el<span class="token punctuation">.</span>style<span class="token punctuation">,</span> styles<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">addStyles</span><span class="token punctuation">(</span>document<span class="token punctuation">.</span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string">'my-element'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> |
|
background<span class="token punctuation">:</span> <span class="token string">'red'</span><span class="token punctuation">,</span> |
|
color<span class="token punctuation">:</span> <span class="token string">'#ffff00'</span><span class="token punctuation">,</span> |
|
fontSize<span class="token punctuation">:</span> <span class="token string">'3rem'</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: addWeekDays">title: addWeekDays</h2> |
|
<p>Calculates the date after adding the given number of business days.</p> |
|
<ul> |
|
<li>Use <code>Array.from()</code> to construct an array with <code>length</code> equal to the <code>count</code> of business days to be added.</li> |
|
<li>Use <code>Array.prototype.reduce()</code> to iterate over the array, starting from <code>startDate</code> and incrementing, using <code>Date.prototype.getDate()</code> and <code>Date.prototype.setDate()</code>.</li> |
|
<li>If the current <code>date</code> is on a weekend, update it again by adding either one day or two days to make it a weekday.</li> |
|
<li><strong>NOTE:</strong> Does not take official holidays into account.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">addWeekDays</span> <span class="token operator">=</span> <span class="token punctuation">(</span>startDate<span class="token punctuation">,</span> count<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
Array<span class="token punctuation">.</span><span class="token keyword keyword-from">from</span><span class="token punctuation">(</span><span class="token punctuation">{</span> length<span class="token punctuation">:</span> count <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span>date <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
date <span class="token operator">=</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span>date<span class="token punctuation">.</span><span class="token function">setDate</span><span class="token punctuation">(</span>date<span class="token punctuation">.</span><span class="token function">getDate</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>date<span class="token punctuation">.</span><span class="token function">getDay</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">6</span> <span class="token operator">===</span> <span class="token number">0</span><span class="token punctuation">)</span> |
|
date <span class="token operator">=</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span>date<span class="token punctuation">.</span><span class="token function">setDate</span><span class="token punctuation">(</span>date<span class="token punctuation">.</span><span class="token function">getDate</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token punctuation">(</span>date<span class="token punctuation">.</span><span class="token function">getDay</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token number">6</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> date<span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">,</span> startDate<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">addWeekDays</span><span class="token punctuation">(</span><span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token string">'Oct 09, 2020'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'Oct 16, 2020'</span> |
|
<span class="token function">addWeekDays</span><span class="token punctuation">(</span><span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token string">'Oct 12, 2020'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'Oct 19, 2020'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: all">title: all</h2> |
|
<p>Checks if the provided predicate function returns <code>true</code> for all elements in a collection.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.every()</code> to test if all elements in the collection return <code>true</code> based on <code>fn</code>.</li> |
|
<li>Omit the second argument, <code>fn</code>, to use <code>Boolean</code> as a default.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">all</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> fn <span class="token operator">=</span> Boolean<span class="token punctuation">)</span> <span class="token operator">=></span> arr<span class="token punctuation">.</span><span class="token function">every</span><span class="token punctuation">(</span>fn<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">all</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">,</span> x <span class="token operator">=></span> x <span class="token operator">></span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
<span class="token function">all</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: allEqual">title: allEqual</h2> |
|
<p>Checks if all elements in an array are equal.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.every()</code> to check if all the elements of the array are the same as the first one.</li> |
|
<li>Elements in the array are compared using the strict comparison operator, which does not account for <code>NaN</code> self-inequality.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">allEqual</span> <span class="token operator">=</span> arr <span class="token operator">=></span> arr<span class="token punctuation">.</span><span class="token function">every</span><span class="token punctuation">(</span>val <span class="token operator">=></span> val <span class="token operator">===</span> arr<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">allEqual</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> |
|
<span class="token function">allEqual</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: allEqualBy">title: allEqualBy</h2> |
|
<p>Checks if all elements in an array are equal, based on the provided mapping function.</p> |
|
<ul> |
|
<li>Apply <code>fn</code> to the first element of <code>arr</code>.</li> |
|
<li>Use <code>Array.prototype.every()</code> to check if <code>fn</code> returns the same value for all elements in the array as it did for the first one.</li> |
|
<li>Elements in the array are compared using the strict comparison operator, which does not account for <code>NaN</code> self-inequality.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">allEqualBy</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> fn<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> eql <span class="token operator">=</span> <span class="token function">fn</span><span class="token punctuation">(</span>arr<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> arr<span class="token punctuation">.</span><span class="token function">every</span><span class="token punctuation">(</span>val <span class="token operator">=></span> <span class="token function">fn</span><span class="token punctuation">(</span>val<span class="token punctuation">)</span> <span class="token operator">===</span> eql<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">allEqualBy</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1.1</span><span class="token punctuation">,</span> <span class="token number">1.2</span><span class="token punctuation">,</span> <span class="token number">1.3</span><span class="token punctuation">]</span><span class="token punctuation">,</span> Math<span class="token punctuation">.</span>round<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
<span class="token function">allEqualBy</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1.1</span><span class="token punctuation">,</span> <span class="token number">1.3</span><span class="token punctuation">,</span> <span class="token number">1.6</span><span class="token punctuation">]</span><span class="token punctuation">,</span> Math<span class="token punctuation">.</span>round<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: allUnique">title: allUnique</h2> |
|
<p>Checks if all elements in an array are unique.</p> |
|
<ul> |
|
<li>Create a new <code>Set</code> from the mapped values to keep only unique occurrences.</li> |
|
<li>Use <code>Array.prototype.length</code> and <code>Set.prototype.size</code> to compare the length of the unique values to the original array.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">allUnique</span> <span class="token operator">=</span> arr <span class="token operator">=></span> arr<span class="token punctuation">.</span>length <span class="token operator">===</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Set</span><span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token punctuation">.</span>size<span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">allUnique</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
<span class="token function">allUnique</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: allUniqueBy">title: allUniqueBy</h2> |
|
<p>Checks if all elements in an array are unique, based on the provided mapping function.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.map()</code> to apply <code>fn</code> to all elements in <code>arr</code>.</li> |
|
<li>Create a new <code>Set</code> from the mapped values to keep only unique occurrences.</li> |
|
<li>Use <code>Array.prototype.length</code> and <code>Set.prototype.size</code> to compare the length of the unique mapped values to the original array.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">allUniqueBy</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> fn<span class="token punctuation">)</span> <span class="token operator">=></span> arr<span class="token punctuation">.</span>length <span class="token operator">===</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Set</span><span class="token punctuation">(</span>arr<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>fn<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span>size<span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">allUniqueBy</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1.2</span><span class="token punctuation">,</span> <span class="token number">2.4</span><span class="token punctuation">,</span> <span class="token number">2.9</span><span class="token punctuation">]</span><span class="token punctuation">,</span> Math<span class="token punctuation">.</span>round<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
<span class="token function">allUniqueBy</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1.2</span><span class="token punctuation">,</span> <span class="token number">2.3</span><span class="token punctuation">,</span> <span class="token number">2.4</span><span class="token punctuation">]</span><span class="token punctuation">,</span> Math<span class="token punctuation">.</span>round<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: and<br> |
|
unlisted: true">title: and<br> |
|
unlisted: true</h2> |
|
<p>Checks if both arguments are <code>true</code>.</p> |
|
<ul> |
|
<li>Use the logical and (<code>&&</code>) operator on the two given values.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">and</span> <span class="token operator">=</span> <span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> a <span class="token operator">&&</span> b<span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">and</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
<span class="token function">and</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> |
|
<span class="token function">and</span><span class="token punctuation">(</span><span class="token boolean">false</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: any">title: any</h2> |
|
<p>Checks if the provided predicate function returns <code>true</code> for at least one element in a collection.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.some()</code> to test if any elements in the collection return <code>true</code> based on <code>fn</code>.</li> |
|
<li>Omit the second argument, <code>fn</code>, to use <code>Boolean</code> as a default.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">any</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> fn <span class="token operator">=</span> Boolean<span class="token punctuation">)</span> <span class="token operator">=></span> arr<span class="token punctuation">.</span><span class="token function">some</span><span class="token punctuation">(</span>fn<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">any</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> x <span class="token operator">=></span> x <span class="token operator">>=</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
<span class="token function">any</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: aperture">title: aperture</h2> |
|
<p>Creates an array of <code>n</code>-tuples of consecutive elements.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.slice()</code> and <code>Array.prototype.map()</code> to create an array of appropriate length.</li> |
|
<li>Populate the array with <code>n</code>-tuples of consecutive elements from <code>arr</code>.</li> |
|
<li>If <code>n</code> is greater than the length of <code>arr</code>, return an empty array.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">aperture</span> <span class="token operator">=</span> <span class="token punctuation">(</span>n<span class="token punctuation">,</span> arr<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
n <span class="token operator">></span> arr<span class="token punctuation">.</span>length |
|
<span class="token operator">?</span> <span class="token punctuation">[</span><span class="token punctuation">]</span> |
|
<span class="token punctuation">:</span> arr<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span>n <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token punctuation">(</span>v<span class="token punctuation">,</span> i<span class="token punctuation">)</span> <span class="token operator">=></span> arr<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span> i <span class="token operator">+</span> n<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">aperture</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [[1, 2], [2, 3], [3, 4]]</span> |
|
<span class="token function">aperture</span><span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [[1, 2, 3], [2, 3, 4]]</span> |
|
<span class="token function">aperture</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// []</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: approximatelyEqual">title: approximatelyEqual</h2> |
|
<p>Checks if two numbers are approximately equal to each other.</p> |
|
<ul> |
|
<li>Use <code>Math.abs()</code> to compare the absolute difference of the two values to <code>epsilon</code>.</li> |
|
<li>Omit the third argument, <code>epsilon</code>, to use a default value of <code>0.001</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">approximatelyEqual</span> <span class="token operator">=</span> <span class="token punctuation">(</span>v1<span class="token punctuation">,</span> v2<span class="token punctuation">,</span> epsilon <span class="token operator">=</span> <span class="token number">0.001</span><span class="token punctuation">)</span> <span class="token operator">=></span> |
|
Math<span class="token punctuation">.</span><span class="token function">abs</span><span class="token punctuation">(</span>v1 <span class="token operator">-</span> v2<span class="token punctuation">)</span> <span class="token operator"><</span> epsilon<span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">approximatelyEqual</span><span class="token punctuation">(</span>Math<span class="token punctuation">.</span><span class="token constant">PI</span> <span class="token operator">/</span> <span class="token number">2.0</span><span class="token punctuation">,</span> <span class="token number">1.5708</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: arithmeticProgression">title: arithmeticProgression</h2> |
|
<p>Creates an array of numbers in the arithmetic progression, starting with the given positive integer and up to the specified limit.</p> |
|
<ul> |
|
<li>Use <code>Array.from()</code> to create an array of the desired length, <code>lim/n</code>. Use a map function to fill it with the desired values in the given range.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">arithmeticProgression</span> <span class="token operator">=</span> <span class="token punctuation">(</span>n<span class="token punctuation">,</span> lim<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
Array<span class="token punctuation">.</span><span class="token keyword keyword-from">from</span><span class="token punctuation">(</span><span class="token punctuation">{</span> length<span class="token punctuation">:</span> Math<span class="token punctuation">.</span><span class="token function">ceil</span><span class="token punctuation">(</span>lim <span class="token operator">/</span> n<span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">(</span>_<span class="token punctuation">,</span> i<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span>i <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">*</span> n <span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">arithmeticProgression</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">25</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [5, 10, 15, 20, 25]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: arrayToCSV">title: arrayToCSV</h2> |
|
<p>Converts a 2D array to a comma-separated values (CSV) string.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.map()</code> and <code>Array.prototype.join(delimiter)</code> to combine individual 1D arrays (rows) into strings.</li> |
|
<li>Use <code>Array.prototype.join('\n')</code> to combine all rows into a CSV string, separating each row with a newline.</li> |
|
<li>Omit the second argument, <code>delimiter</code>, to use a default delimiter of <code>,</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> arrayToCSV <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> delimiter <span class="token operator">=</span> <span class="token string">','</span><span class="token punctuation">)</span> <span class="token operator">=></span> |
|
arr |
|
<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>v <span class="token operator">=></span> |
|
v<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>x <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token function">isNaN</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token operator">?</span> <span class="token template-string"><span class="token string">`"</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>x<span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token regex">/"/g</span><span class="token punctuation">,</span> <span class="token string">'""'</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">"`</span></span> <span class="token punctuation">:</span> x<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span>delimiter<span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">'\n'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">arrayToCSV</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">'a'</span><span class="token punctuation">,</span> <span class="token string">'b'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'c'</span><span class="token punctuation">,</span> <span class="token string">'d'</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '"a","b"\n"c","d"'</span> |
|
<span class="token function">arrayToCSV</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">'a'</span><span class="token punctuation">,</span> <span class="token string">'b'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'c'</span><span class="token punctuation">,</span> <span class="token string">'d'</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">';'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '"a";"b"\n"c";"d"'</span> |
|
<span class="token function">arrayToCSV</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">'a'</span><span class="token punctuation">,</span> <span class="token string">'"b" great'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'c'</span><span class="token punctuation">,</span> <span class="token number">3.1415</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// '"a","""b"" great"\n"c",3.1415'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: arrayToHTMLList">title: arrayToHTMLList</h2> |
|
<p>Converts the given array elements into <code><li></code> tags and appends them to the list of the given id.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.map()</code> and <code>Document.querySelector()</code> to create a list of html tags.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">arrayToHTMLList</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> listID<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
document<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span><span class="token template-string"><span class="token string">`#</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>listID<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">.</span>innerHTML <span class="token operator">+=</span> arr |
|
<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>item <span class="token operator">=></span> <span class="token template-string"><span class="token string">`<li></span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>item<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"></li>`</span></span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">arrayToHTMLList</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">'item 1'</span><span class="token punctuation">,</span> <span class="token string">'item 2'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">'myListID'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: ary">title: ary</h2> |
|
<p>Creates a function that accepts up to <code>n</code> arguments, ignoring any additional arguments.</p> |
|
<ul> |
|
<li>Call the provided function, <code>fn</code>, with up to <code>n</code> arguments, using <code>Array.prototype.slice(0, n)</code> and the spread operator (<code>...</code>).</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">ary</span> <span class="token operator">=</span> <span class="token punctuation">(</span>fn<span class="token punctuation">,</span> n<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token function">fn</span><span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> n<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> firstTwoMax <span class="token operator">=</span> <span class="token function">ary</span><span class="token punctuation">(</span>Math<span class="token punctuation">.</span>max<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token string">'a'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">10</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>x <span class="token operator">=></span> <span class="token function">firstTwoMax</span><span class="token punctuation">(</span><span class="token operator">...</span>x<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [6, 6, 10]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: assertValidKeys">title: assertValidKeys</h2> |
|
<p>Validates all keys in an object match the given <code>keys</code>.</p> |
|
<ul> |
|
<li>Use <code>Object.keys()</code> to get the keys of the given object, <code>obj</code>.</li> |
|
<li>Use <code>Array.prototype.every()</code> and <code>Array.prototype.includes()</code> to validate that each key in the object is specified in the <code>keys</code> array.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">assertValidKeys</span> <span class="token operator">=</span> <span class="token punctuation">(</span>obj<span class="token punctuation">,</span> keys<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
Object<span class="token punctuation">.</span><span class="token function">keys</span><span class="token punctuation">(</span>obj<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">every</span><span class="token punctuation">(</span>key <span class="token operator">=></span> keys<span class="token punctuation">.</span><span class="token function">includes</span><span class="token punctuation">(</span>key<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">assertValidKeys</span><span class="token punctuation">(</span><span class="token punctuation">{</span> id<span class="token punctuation">:</span> <span class="token number">10</span><span class="token punctuation">,</span> name<span class="token punctuation">:</span> <span class="token string">'apple'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'id'</span><span class="token punctuation">,</span> <span class="token string">'name'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
<span class="token function">assertValidKeys</span><span class="token punctuation">(</span><span class="token punctuation">{</span> id<span class="token punctuation">:</span> <span class="token number">10</span><span class="token punctuation">,</span> name<span class="token punctuation">:</span> <span class="token string">'apple'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'id'</span><span class="token punctuation">,</span> <span class="token string">'type'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: atob">title: atob</h2> |
|
<p>Decodes a string of data which has been encoded using base-64 encoding.</p> |
|
<ul> |
|
<li>Create a <code>Buffer</code> for the given string with base-64 encoding and use <code>Buffer.toString('binary')</code> to return the decoded string.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">atob</span> <span class="token operator">=</span> str <span class="token operator">=></span> Buffer<span class="token punctuation">.</span><span class="token keyword keyword-from">from</span><span class="token punctuation">(</span>str<span class="token punctuation">,</span> <span class="token string">'base64'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token string">'binary'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">atob</span><span class="token punctuation">(</span><span class="token string">'Zm9vYmFy'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'foobar'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: attempt">title: attempt</h2> |
|
<p>Attempts to invoke a function with the provided arguments, returning either the result or the caught error object.</p> |
|
<ul> |
|
<li>Use a <code>try... catch</code> block to return either the result of the function or an appropriate error.</li> |
|
<li>If the caught object is not an <code>Error</code>, use it to create a new <code>Error</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">attempt</span> <span class="token operator">=</span> <span class="token punctuation">(</span>fn<span class="token punctuation">,</span> <span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-try">try</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-return">return</span> <span class="token function">fn</span><span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> <span class="token keyword keyword-catch">catch</span> <span class="token punctuation">(</span><span class="token class-name">e</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-return">return</span> e <span class="token keyword keyword-instanceof">instanceof</span> <span class="token class-name">Error</span> <span class="token operator">?</span> e <span class="token punctuation">:</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Error</span><span class="token punctuation">(</span>e<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-let">let</span> elements <span class="token operator">=</span> <span class="token function">attempt</span><span class="token punctuation">(</span><span class="token keyword keyword-function">function</span><span class="token punctuation">(</span>selector<span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-return">return</span> document<span class="token punctuation">.</span><span class="token function">querySelectorAll</span><span class="token punctuation">(</span>selector<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">'>_>'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>elements <span class="token keyword keyword-instanceof">instanceof</span> <span class="token class-name">Error</span><span class="token punctuation">)</span> elements <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// elements = []</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: average">title: average</h2> |
|
<p>Calculates the average of two or more numbers.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.reduce()</code> to add each value to an accumulator, initialized with a value of <code>0</code>.</li> |
|
<li>Divide the resulting array by its length.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">average</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token operator">...</span>nums<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
nums<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span><span class="token punctuation">(</span>acc<span class="token punctuation">,</span> val<span class="token punctuation">)</span> <span class="token operator">=></span> acc <span class="token operator">+</span> val<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token operator">/</span> nums<span class="token punctuation">.</span>length<span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">average</span><span class="token punctuation">(</span><span class="token operator">...</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 2</span> |
|
<span class="token function">average</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 2</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: averageBy">title: averageBy</h2> |
|
<p>Calculates the average of an array, after mapping each element to a value using the provided function.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.map()</code> to map each element to the value returned by <code>fn</code>.</li> |
|
<li>Use <code>Array.prototype.reduce()</code> to add each value to an accumulator, initialized with a value of <code>0</code>.</li> |
|
<li>Divide the resulting array by its length.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">averageBy</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> fn<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
arr |
|
<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token keyword keyword-typeof">typeof</span> fn <span class="token operator">===</span> <span class="token string">'function'</span> <span class="token operator">?</span> fn <span class="token punctuation">:</span> val <span class="token operator">=></span> val<span class="token punctuation">[</span>fn<span class="token punctuation">]</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span><span class="token punctuation">(</span>acc<span class="token punctuation">,</span> val<span class="token punctuation">)</span> <span class="token operator">=></span> acc <span class="token operator">+</span> val<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token operator">/</span> arr<span class="token punctuation">.</span>length<span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">averageBy</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">{</span> n<span class="token punctuation">:</span> <span class="token number">4</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> n<span class="token punctuation">:</span> <span class="token number">2</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> n<span class="token punctuation">:</span> <span class="token number">8</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> n<span class="token punctuation">:</span> <span class="token number">6</span> <span class="token punctuation">}</span><span class="token punctuation">]</span><span class="token punctuation">,</span> o <span class="token operator">=></span> o<span class="token punctuation">.</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 5</span> |
|
<span class="token function">averageBy</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">{</span> n<span class="token punctuation">:</span> <span class="token number">4</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> n<span class="token punctuation">:</span> <span class="token number">2</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> n<span class="token punctuation">:</span> <span class="token number">8</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> n<span class="token punctuation">:</span> <span class="token number">6</span> <span class="token punctuation">}</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">'n'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 5</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: bifurcate">title: bifurcate</h2> |
|
<p>Splits values into two groups, based on the result of the given <code>filter</code> array.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.reduce()</code> and <code>Array.prototype.push()</code> to add elements to groups, based on <code>filter</code>.</li> |
|
<li>If <code>filter</code> has a truthy value for any element, add it to the first group, otherwise add it to the second group.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">bifurcate</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> filter<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
arr<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span><span class="token punctuation">(</span>acc<span class="token punctuation">,</span> val<span class="token punctuation">,</span> i<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span>acc<span class="token punctuation">[</span>filter<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">?</span> <span class="token number">0</span> <span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>val<span class="token punctuation">)</span><span class="token punctuation">,</span> acc<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">[</span> |
|
<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">bifurcate</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">'beep'</span><span class="token punctuation">,</span> <span class="token string">'boop'</span><span class="token punctuation">,</span> <span class="token string">'foo'</span><span class="token punctuation">,</span> <span class="token string">'bar'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// [ ['beep', 'boop', 'bar'], ['foo'] ]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: bifurcateBy">title: bifurcateBy</h2> |
|
<p>Splits values into two groups, based on the result of the given filtering function.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.reduce()</code> and <code>Array.prototype.push()</code> to add elements to groups, based on the value returned by <code>fn</code> for each element.</li> |
|
<li>If <code>fn</code> returns a truthy value for any element, add it to the first group, otherwise add it to the second group.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">bifurcateBy</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> fn<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
arr<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span><span class="token punctuation">(</span>acc<span class="token punctuation">,</span> val<span class="token punctuation">,</span> i<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span>acc<span class="token punctuation">[</span><span class="token function">fn</span><span class="token punctuation">(</span>val<span class="token punctuation">,</span> i<span class="token punctuation">)</span> <span class="token operator">?</span> <span class="token number">0</span> <span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>val<span class="token punctuation">)</span><span class="token punctuation">,</span> acc<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">[</span> |
|
<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">bifurcateBy</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">'beep'</span><span class="token punctuation">,</span> <span class="token string">'boop'</span><span class="token punctuation">,</span> <span class="token string">'foo'</span><span class="token punctuation">,</span> <span class="token string">'bar'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> x <span class="token operator">=></span> x<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">===</span> <span class="token string">'b'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// [ ['beep', 'boop', 'bar'], ['foo'] ]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: binary">title: binary</h2> |
|
<p>Creates a function that accepts up to two arguments, ignoring any additional arguments.</p> |
|
<ul> |
|
<li>Call the provided function, <code>fn</code>, with the first two arguments given.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">binary</span> <span class="token operator">=</span> fn <span class="token operator">=></span> <span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token function">fn</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token punctuation">[</span><span class="token string">'2'</span><span class="token punctuation">,</span> <span class="token string">'1'</span><span class="token punctuation">,</span> <span class="token string">'0'</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token function">binary</span><span class="token punctuation">(</span>Math<span class="token punctuation">.</span>max<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [2, 1, 2]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: binarySearch">title: binarySearch</h2> |
|
<p>Finds the index of a given element in a sorted array using the binary search algorithm.</p> |
|
<ul> |
|
<li>Declare the left and right search boundaries, <code>l</code> and <code>r</code>, initialized to <code>0</code> and the <code>length</code> of the array respectively.</li> |
|
<li>Use a <code>while</code> loop to repeatedly narrow down the search subarray, using <code>Math.floor()</code> to cut it in half.</li> |
|
<li>Return the index of the element if found, otherwise return <code>-1</code>.</li> |
|
<li><strong>Note:</strong> Does not account for duplicate values in the array.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">binarySearch</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> item<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-let">let</span> l <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> |
|
r <span class="token operator">=</span> arr<span class="token punctuation">.</span>length <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-while">while</span> <span class="token punctuation">(</span>l <span class="token operator"><=</span> r<span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> mid <span class="token operator">=</span> Math<span class="token punctuation">.</span><span class="token function">floor</span><span class="token punctuation">(</span><span class="token punctuation">(</span>l <span class="token operator">+</span> r<span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> guess <span class="token operator">=</span> arr<span class="token punctuation">[</span>mid<span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>guess <span class="token operator">===</span> item<span class="token punctuation">)</span> <span class="token keyword keyword-return">return</span> mid<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>guess <span class="token operator">></span> item<span class="token punctuation">)</span> r <span class="token operator">=</span> mid <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-else">else</span> l <span class="token operator">=</span> mid <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token keyword keyword-return">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">binarySearch</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 0</span> |
|
<span class="token function">binarySearch</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 4</span> |
|
<span class="token function">binarySearch</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// -1</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: bind">title: bind</h2> |
|
<p>Creates a function that invokes <code>fn</code> with a given context, optionally prepending any additional supplied parameters to the arguments.</p> |
|
<ul> |
|
<li>Return a <code>function</code> that uses <code>Function.prototype.apply()</code> to apply the given <code>context</code> to <code>fn</code>.</li> |
|
<li>Use the spread operator (<code>...</code>) to prepend any additional supplied parameters to the arguments.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">bind</span> <span class="token operator">=</span> <span class="token punctuation">(</span>fn<span class="token punctuation">,</span> context<span class="token punctuation">,</span> <span class="token operator">...</span>boundArgs<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
fn<span class="token punctuation">.</span><span class="token function">apply</span><span class="token punctuation">(</span>context<span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token operator">...</span>boundArgs<span class="token punctuation">,</span> <span class="token operator">...</span>args<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-function">function</span> <span class="token function">greet</span><span class="token punctuation">(</span>greeting<span class="token punctuation">,</span> punctuation<span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-return">return</span> greeting <span class="token operator">+</span> <span class="token string">' '</span> <span class="token operator">+</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span>user <span class="token operator">+</span> punctuation<span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token keyword keyword-const">const</span> freddy <span class="token operator">=</span> <span class="token punctuation">{</span> user<span class="token punctuation">:</span> <span class="token string">'fred'</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> freddyBound <span class="token operator">=</span> <span class="token function">bind</span><span class="token punctuation">(</span>greet<span class="token punctuation">,</span> freddy<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token function">freddyBound</span><span class="token punctuation">(</span><span class="token string">'hi'</span><span class="token punctuation">,</span> <span class="token string">'!'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'hi fred!'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: bindAll">title: bindAll</h2> |
|
<p>Binds methods of an object to the object itself, overwriting the existing method.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.forEach()</code> to iterate over the given <code>fns</code>.</li> |
|
<li>Return a function for each one, using <code>Function.prototype.apply()</code> to apply the given context (<code>obj</code>) to <code>fn</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">bindAll</span> <span class="token operator">=</span> <span class="token punctuation">(</span>obj<span class="token punctuation">,</span> <span class="token operator">...</span>fns<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
fns<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span> |
|
fn <span class="token operator">=></span> <span class="token punctuation">(</span> |
|
<span class="token punctuation">(</span>f <span class="token operator">=</span> obj<span class="token punctuation">[</span>fn<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">(</span>obj<span class="token punctuation">[</span>fn<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword keyword-function">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-return">return</span> f<span class="token punctuation">.</span><span class="token function">apply</span><span class="token punctuation">(</span>obj<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-let">let</span> view <span class="token operator">=</span> <span class="token punctuation">{</span> |
|
label<span class="token punctuation">:</span> <span class="token string">'docs'</span><span class="token punctuation">,</span> |
|
click<span class="token punctuation">:</span> <span class="token keyword keyword-function">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'clicked '</span> <span class="token operator">+</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span>label<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
<span class="token function">bindAll</span><span class="token punctuation">(</span>view<span class="token punctuation">,</span> <span class="token string">'click'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
document<span class="token punctuation">.</span>body<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> view<span class="token punctuation">.</span>click<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// Log 'clicked docs' when clicked.</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: bindKey">title: bindKey</h2> |
|
<p>Creates a function that invokes the method at a given key of an object, optionally prepending any additional supplied parameters to the arguments.</p> |
|
<ul> |
|
<li>Return a <code>function</code> that uses <code>Function.prototype.apply()</code> to bind <code>context[fn]</code> to <code>context</code>.</li> |
|
<li>Use the spread operator (<code>...</code>) to prepend any additional supplied parameters to the arguments.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">bindKey</span> <span class="token operator">=</span> <span class="token punctuation">(</span>context<span class="token punctuation">,</span> fn<span class="token punctuation">,</span> <span class="token operator">...</span>boundArgs<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
context<span class="token punctuation">[</span>fn<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">apply</span><span class="token punctuation">(</span>context<span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token operator">...</span>boundArgs<span class="token punctuation">,</span> <span class="token operator">...</span>args<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> freddy <span class="token operator">=</span> <span class="token punctuation">{</span> |
|
user<span class="token punctuation">:</span> <span class="token string">'fred'</span><span class="token punctuation">,</span> |
|
greet<span class="token punctuation">:</span> <span class="token keyword keyword-function">function</span><span class="token punctuation">(</span>greeting<span class="token punctuation">,</span> punctuation<span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-return">return</span> greeting <span class="token operator">+</span> <span class="token string">' '</span> <span class="token operator">+</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span>user <span class="token operator">+</span> punctuation<span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> freddyBound <span class="token operator">=</span> <span class="token function">bindKey</span><span class="token punctuation">(</span>freddy<span class="token punctuation">,</span> <span class="token string">'greet'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token function">freddyBound</span><span class="token punctuation">(</span><span class="token string">'hi'</span><span class="token punctuation">,</span> <span class="token string">'!'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'hi fred!'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: binomialCoefficient">title: binomialCoefficient</h2> |
|
<p>Calculates the number of ways to choose <code>k</code> items from <code>n</code> items without repetition and without order.</p> |
|
<ul> |
|
<li>Use <code>Number.isNaN()</code> to check if any of the two values is <code>NaN</code>.</li> |
|
<li>Check if <code>k</code> is less than <code>0</code>, greater than or equal to <code>n</code>, equal to <code>1</code> or <code>n - 1</code> and return the appropriate result.</li> |
|
<li>Check if <code>n - k</code> is less than <code>k</code> and switch their values accordingly.</li> |
|
<li>Loop from <code>2</code> through <code>k</code> and calculate the binomial coefficient.</li> |
|
<li>Use <code>Math.round()</code> to account for rounding errors in the calculation.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">binomialCoefficient</span> <span class="token operator">=</span> <span class="token punctuation">(</span>n<span class="token punctuation">,</span> k<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>Number<span class="token punctuation">.</span><span class="token function">isNaN</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span> <span class="token operator">||</span> Number<span class="token punctuation">.</span><span class="token function">isNaN</span><span class="token punctuation">(</span>k<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword keyword-return">return</span> <span class="token number">NaN</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>k <span class="token operator"><</span> <span class="token number">0</span> <span class="token operator">||</span> k <span class="token operator">></span> n<span class="token punctuation">)</span> <span class="token keyword keyword-return">return</span> <span class="token number">0</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>k <span class="token operator">===</span> <span class="token number">0</span> <span class="token operator">||</span> k <span class="token operator">===</span> n<span class="token punctuation">)</span> <span class="token keyword keyword-return">return</span> <span class="token number">1</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>k <span class="token operator">===</span> <span class="token number">1</span> <span class="token operator">||</span> k <span class="token operator">===</span> n <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token keyword keyword-return">return</span> n<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>n <span class="token operator">-</span> k <span class="token operator"><</span> k<span class="token punctuation">)</span> k <span class="token operator">=</span> n <span class="token operator">-</span> k<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-let">let</span> res <span class="token operator">=</span> n<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-for">for</span> <span class="token punctuation">(</span><span class="token keyword keyword-let">let</span> j <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">;</span> j <span class="token operator"><=</span> k<span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span> res <span class="token operator">*=</span> <span class="token punctuation">(</span>n <span class="token operator">-</span> j <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">/</span> j<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> Math<span class="token punctuation">.</span><span class="token function">round</span><span class="token punctuation">(</span>res<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">binomialCoefficient</span><span class="token punctuation">(</span><span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 28</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: both<br> |
|
unlisted: true">title: both<br> |
|
unlisted: true</h2> |
|
<p>Checks if both of the given functions return <code>true</code> for a given set of arguments.</p> |
|
<ul> |
|
<li>Use the logical and (<code>&&</code>) operator on the result of calling the two functions with the supplied <code>args</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">both</span> <span class="token operator">=</span> <span class="token punctuation">(</span>f<span class="token punctuation">,</span> g<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token function">f</span><span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">&&</span> <span class="token function">g</span><span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">isEven</span> <span class="token operator">=</span> num <span class="token operator">=></span> num <span class="token operator">%</span> <span class="token number">2</span> <span class="token operator">===</span> <span class="token number">0</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> <span class="token function-variable function">isPositive</span> <span class="token operator">=</span> num <span class="token operator">=></span> num <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> isPositiveEven <span class="token operator">=</span> <span class="token function">both</span><span class="token punctuation">(</span>isEven<span class="token punctuation">,</span> isPositive<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token function">isPositiveEven</span><span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
<span class="token function">isPositiveEven</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> |
|
</pre><p><a href="https://www.wappalyzer.com/technologies/widgets/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">Widgets</a> <br> |
|
chrome-extension://gppongmhjkpfnbhagpmjfkannfbllamg/images/icons/Moat.svg<br> |
|
chrome-extension://gppongmhjkpfnbhagpmjfkannfbllamg/images/icons/Facebook.svg<br> |
|
<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\Facebook.svg" alt></p> |
|
<p>Facebook](<a href="https://www.wappalyzer.com/technologies/widgets/facebook/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/widgets/facebook/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\AddThis.svg" alt></p> |
|
<p>AddThis](<a href="https://www.wappalyzer.com/technologies/widgets/addthis/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/widgets/addthis/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p><a href="https://www.wappalyzer.com/technologies/analytics/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">Analytics</a></p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\Moat.svg" alt></p> |
|
<p>Moat](<a href="https://www.wappalyzer.com/technologies/analytics/moat/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/analytics/moat/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\Google%20Analytics.svg" alt></p> |
|
<p>Google Analytics](<a href="https://www.wappalyzer.com/technologies/analytics/google-analytics/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/analytics/google-analytics/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\Google.svg" alt></p> |
|
<p>Google Ads Conversion Tracking](<a href="https://www.wappalyzer.com/technologies/analytics/google-ads-conversion-tracking/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/analytics/google-ads-conversion-tracking/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p><a href="https://www.wappalyzer.com/technologies/javascript-frameworks/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">JavaScript frameworks</a></p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\React.png" alt></p> |
|
<p>React](<a href="https://www.wappalyzer.com/technologies/javascript-frameworks/react/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/javascript-frameworks/react/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\Gatsby.svg" alt></p> |
|
<p>Gatsby2.25.4](<a href="https://www.wappalyzer.com/technologies/javascript-frameworks/gatsby/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/javascript-frameworks/gatsby/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p><a href="https://www.wappalyzer.com/technologies/font-scripts/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">Font scripts</a></p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\Google%20Font%20API.png" alt></p> |
|
<p>Google Font API](<a href="https://www.wappalyzer.com/technologies/font-scripts/google-font-api/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/font-scripts/google-font-api/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p><a href="https://www.wappalyzer.com/technologies/miscellaneous/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">Miscellaneous</a></p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\webpack.svg" alt></p> |
|
<p>webpack](<a href="https://www.wappalyzer.com/technologies/miscellaneous/webpack/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/miscellaneous/webpack/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\Prism.svg" alt></p> |
|
<p>Prism](<a href="https://www.wappalyzer.com/technologies/miscellaneous/prism/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/miscellaneous/prism/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p><a href="https://www.wappalyzer.com/technologies/cdn/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">CDN</a></p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\Unpkg.png" alt></p> |
|
<p>Unpkg](<a href="https://www.wappalyzer.com/technologies/cdn/unpkg/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/cdn/unpkg/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\jsdelivr-icon.svg" alt></p> |
|
<p>jsDelivr](<a href="https://www.wappalyzer.com/technologies/cdn/jsdelivr/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/cdn/jsdelivr/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\jQuery.svg" alt></p> |
|
<p>jQuery CDN](<a href="https://www.wappalyzer.com/technologies/cdn/jquery-cdn/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/cdn/jquery-cdn/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\Netlify.svg" alt></p> |
|
<p>Netlify](<a href="https://www.wappalyzer.com/technologies/cdn/netlify/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/cdn/netlify/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p><a href="https://www.wappalyzer.com/technologies/marketing-automation/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">Marketing automation</a></p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\mailchimp.svg" alt></p> |
|
<p>MailChimp](<a href="https://www.wappalyzer.com/technologies/marketing-automation/mailchimp/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/marketing-automation/mailchimp/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p><a href="https://www.wappalyzer.com/technologies/advertising/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">Advertising</a></p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\Google%20AdSense.svg" alt></p> |
|
<p>Google AdSense](<a href="https://www.wappalyzer.com/technologies/advertising/google-adsense/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/advertising/google-adsense/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p><a href="https://www.wappalyzer.com/technologies/tag-managers/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">Tag managers</a></p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\Google%20Tag%20Manager.svg" alt></p> |
|
<p>Google Tag Manager](<a href="https://www.wappalyzer.com/technologies/tag-managers/google-tag-manager/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/tag-managers/google-tag-manager/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p><a href="https://www.wappalyzer.com/technologies/live-chat/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">Live chat</a></p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\Smartsupp.svg" alt></p> |
|
<p>Smartsupp1](<a href="https://www.wappalyzer.com/technologies/live-chat/smartsupp/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/live-chat/smartsupp/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\LiveChat.png" alt></p> |
|
<p>LiveChat](<a href="https://www.wappalyzer.com/technologies/live-chat/livechat/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/live-chat/livechat/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p><a href="https://www.wappalyzer.com/technologies/static-site-generator/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">Static site generators</a></p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\Gatsby.svg" alt></p> |
|
<p>Gatsby2.25.4](<a href="https://www.wappalyzer.com/technologies/static-site-generator/gatsby/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/static-site-generator/gatsby/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p><a href="https://www.wappalyzer.com/technologies/javascript-libraries/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">JavaScript libraries</a></p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\Lo-dash.png" alt></p> |
|
<p>Lodash4.17.11](<a href="https://www.wappalyzer.com/technologies/javascript-libraries/lodash/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/javascript-libraries/lodash/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\Dojo.png" alt></p> |
|
<p>Dojo1](<a href="https://www.wappalyzer.com/technologies/javascript-libraries/dojo/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/javascript-libraries/dojo/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\core-js.png" alt></p> |
|
<p>core-js3.10.2](<a href="https://www.wappalyzer.com/technologies/javascript-libraries/core-js/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/javascript-libraries/core-js/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\jQuery.svg" alt></p> |
|
<p>jQuery3.1.1](<a href="https://www.wappalyzer.com/technologies/javascript-libraries/jquery/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/javascript-libraries/jquery/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p><a href="https://www.wappalyzer.com/technologies/paas/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">PaaS</a></p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\Netlify.svg" alt></p> |
|
<p>Netlify](<a href="https://www.wappalyzer.com/technologies/paas/netlify/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/paas/netlify/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p><a href="https://www.wappalyzer.com/technologies/ui-frameworks/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">UI frameworks</a></p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\Bootstrap.svg" alt></p> |
|
<p>Bootstrap5.1.1](<a href="https://www.wappalyzer.com/technologies/ui-frameworks/bootstrap/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/ui-frameworks/bootstrap/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p><a href="https://www.wappalyzer.com/technologies/authentication/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">Authentication</a></p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\Facebook.svg" alt></p> |
|
<p>Facebook Login](<a href="https://www.wappalyzer.com/technologies/authentication/facebook-login/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/authentication/facebook-login/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p><a href="https://www.wappalyzer.com/technologies/email/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">Email</a></p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\mailchimp.svg" alt></p> |
|
<p>MailChimp](<a href="https://www.wappalyzer.com/technologies/email/mailchimp/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/email/mailchimp/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<p><a href="https://www.wappalyzer.com/technologies/retargeting/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">Retargeting</a></p> |
|
<p>[<img src="file:///C:\Users\bryan\Downloads\30-seconds-of-code-snippets\chrome-extension:\gppongmhjkpfnbhagpmjfkannfbllamg\images\icons\Google%20Tag%20Manager.svg" alt></p> |
|
<p>Google Remarketing Tag](<a href="https://www.wappalyzer.com/technologies/retargeting/google-remarketing-tag/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer">https://www.wappalyzer.com/technologies/retargeting/google-remarketing-tag/?utm_source=popup&utm_medium=extension&utm_campaign=wappalyzer</a>)</p> |
|
<hr> |
|
<h2 ebook-toc-level-2 heading="title: btoa">title: btoa</h2> |
|
<p>Creates a base-64 encoded ASCII string from a String object in which each character in the string is treated as a byte of binary data.</p> |
|
<ul> |
|
<li>Create a <code>Buffer</code> for the given string with binary encoding and use <code>Buffer.toString('base64')</code> to return the encoded string.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">btoa</span> <span class="token operator">=</span> str <span class="token operator">=></span> Buffer<span class="token punctuation">.</span><span class="token keyword keyword-from">from</span><span class="token punctuation">(</span>str<span class="token punctuation">,</span> <span class="token string">'binary'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token string">'base64'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">btoa</span><span class="token punctuation">(</span><span class="token string">'foobar'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'Zm9vYmFy'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: bubbleSort">title: bubbleSort</h2> |
|
<p>Sorts an array of numbers, using the bubble sort algorithm.</p> |
|
<ul> |
|
<li>Declare a variable, <code>swapped</code>, that indicates if any values were swapped during the current iteration.</li> |
|
<li>Use the spread operator (<code>...</code>) to clone the original array, <code>arr</code>.</li> |
|
<li>Use a <code>for</code> loop to iterate over the elements of the cloned array, terminating before the last element.</li> |
|
<li>Use a nested <code>for</code> loop to iterate over the segment of the array between <code>0</code> and <code>i</code>, swapping any adjacent out of order elements and setting <code>swapped</code> to <code>true</code>.</li> |
|
<li>If <code>swapped</code> is <code>false</code> after an iteration, no more changes are needed, so the cloned array is returned.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">bubbleSort</span> <span class="token operator">=</span> arr <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-let">let</span> swapped <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> a <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token operator">...</span>arr<span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-for">for</span> <span class="token punctuation">(</span><span class="token keyword keyword-let">let</span> i <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span> i <span class="token operator"><</span> a<span class="token punctuation">.</span>length<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
swapped <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-for">for</span> <span class="token punctuation">(</span><span class="token keyword keyword-let">let</span> j <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> j <span class="token operator"><</span> a<span class="token punctuation">.</span>length <span class="token operator">-</span> i<span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>a<span class="token punctuation">[</span>j <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator"><</span> a<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token punctuation">[</span>a<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">,</span> a<span class="token punctuation">[</span>j <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">[</span>a<span class="token punctuation">[</span>j <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> a<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
swapped <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>swapped<span class="token punctuation">)</span> <span class="token keyword keyword-return">return</span> a<span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token keyword keyword-return">return</span> a<span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">bubbleSort</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [1, 2, 3, 4]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: bucketSort">title: bucketSort</h2> |
|
<p>Sorts an array of numbers, using the bucket sort algorithm.</p> |
|
<ul> |
|
<li>Use <code>Math.min(),</code> <code>Math.max()</code> and the spread operator (<code>...</code>) to find the minimum and maximum values of the given array.</li> |
|
<li>Use <code>Array.from()</code> and <code>Math.floor()</code> to create the appropriate number of <code>buckets</code> (empty arrays).</li> |
|
<li>Use <code>Array.prototype.forEach()</code> to populate each bucket with the appropriate elements from the array.</li> |
|
<li>Use <code>Array.prototype.reduce()</code>, the spread operator (<code>...</code>) and <code>Array.prototype.sort()</code> to sort each bucket and append it to the result.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">bucketSort</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> size <span class="token operator">=</span> <span class="token number">5</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> min <span class="token operator">=</span> Math<span class="token punctuation">.</span><span class="token function">min</span><span class="token punctuation">(</span><span class="token operator">...</span>arr<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> max <span class="token operator">=</span> Math<span class="token punctuation">.</span><span class="token function">max</span><span class="token punctuation">(</span><span class="token operator">...</span>arr<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> buckets <span class="token operator">=</span> Array<span class="token punctuation">.</span><span class="token keyword keyword-from">from</span><span class="token punctuation">(</span> |
|
<span class="token punctuation">{</span> length<span class="token punctuation">:</span> Math<span class="token punctuation">.</span><span class="token function">floor</span><span class="token punctuation">(</span><span class="token punctuation">(</span>max <span class="token operator">-</span> min<span class="token punctuation">)</span> <span class="token operator">/</span> size<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">1</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">[</span><span class="token punctuation">]</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
arr<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span>val <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
buckets<span class="token punctuation">[</span>Math<span class="token punctuation">.</span><span class="token function">floor</span><span class="token punctuation">(</span><span class="token punctuation">(</span>val <span class="token operator">-</span> min<span class="token punctuation">)</span> <span class="token operator">/</span> size<span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>val<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> buckets<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span><span class="token punctuation">(</span>acc<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">[</span><span class="token operator">...</span>acc<span class="token punctuation">,</span> <span class="token operator">...</span>b<span class="token punctuation">.</span><span class="token function">sort</span><span class="token punctuation">(</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> a <span class="token operator">-</span> b<span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">bucketSort</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [1, 3, 4, 6]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: byteSize">title: byteSize</h2> |
|
<p>Returns the length of a string in bytes.</p> |
|
<ul> |
|
<li>Convert a given string to a <a href="https://developer.mozilla.org/en-US/docs/Web/API/Blob"><code>Blob</code> Object</a>.</li> |
|
<li>Use <code>Blob.size</code> to get the length of the string in bytes.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">byteSize</span> <span class="token operator">=</span> str <span class="token operator">=></span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Blob</span><span class="token punctuation">(</span><span class="token punctuation">[</span>str<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">.</span>size<span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">byteSize</span><span class="token punctuation">(</span><span class="token string">'😀'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 4</span> |
|
<span class="token function">byteSize</span><span class="token punctuation">(</span><span class="token string">'Hello World'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 11</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: caesarCipher">title: caesarCipher</h2> |
|
<p>Encrypts or decrypts a given string using the Caesar cipher.</p> |
|
<ul> |
|
<li>Use the modulo (<code>%</code>) operator and the ternary operator (<code>?</code>) to calculate the correct encryption/decryption key.</li> |
|
<li>Use the spread operator (<code>...</code>) and <code>Array.prototype.map()</code> to iterate over the letters of the given string.</li> |
|
<li>Use <code>String.prototype.charCodeAt()</code> and <code>String.fromCharCode()</code> to convert each letter appropriately, ignoring special characters, spaces etc.</li> |
|
<li>Use <code>Array.prototype.join()</code> to combine all the letters into a string.</li> |
|
<li>Pass <code>true</code> to the last parameter, <code>decrypt</code>, to decrypt an encrypted string.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">caesarCipher</span> <span class="token operator">=</span> <span class="token punctuation">(</span>str<span class="token punctuation">,</span> shift<span class="token punctuation">,</span> decrypt <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> s <span class="token operator">=</span> decrypt <span class="token operator">?</span> <span class="token punctuation">(</span><span class="token number">26</span> <span class="token operator">-</span> shift<span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">26</span> <span class="token punctuation">:</span> shift<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> n <span class="token operator">=</span> s <span class="token operator">></span> <span class="token number">0</span> <span class="token operator">?</span> s <span class="token punctuation">:</span> <span class="token number">26</span> <span class="token operator">+</span> <span class="token punctuation">(</span>s <span class="token operator">%</span> <span class="token number">26</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> <span class="token punctuation">[</span><span class="token operator">...</span>str<span class="token punctuation">]</span> |
|
<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token punctuation">(</span>l<span class="token punctuation">,</span> i<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> c <span class="token operator">=</span> str<span class="token punctuation">.</span><span class="token function">charCodeAt</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>c <span class="token operator">>=</span> <span class="token number">65</span> <span class="token operator">&&</span> c <span class="token operator"><=</span> <span class="token number">90</span><span class="token punctuation">)</span> |
|
<span class="token keyword keyword-return">return</span> String<span class="token punctuation">.</span><span class="token function">fromCharCode</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">(</span>c <span class="token operator">-</span> <span class="token number">65</span> <span class="token operator">+</span> n<span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">26</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">65</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>c <span class="token operator">>=</span> <span class="token number">97</span> <span class="token operator">&&</span> c <span class="token operator"><=</span> <span class="token number">122</span><span class="token punctuation">)</span> |
|
<span class="token keyword keyword-return">return</span> String<span class="token punctuation">.</span><span class="token function">fromCharCode</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">(</span>c <span class="token operator">-</span> <span class="token number">97</span> <span class="token operator">+</span> n<span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">26</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">97</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> l<span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">caesarCipher</span><span class="token punctuation">(</span><span class="token string">'Hello World!'</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'Ebiil Tloia!'</span> |
|
<span class="token function">caesarCipher</span><span class="token punctuation">(</span><span class="token string">'Ebiil Tloia!'</span><span class="token punctuation">,</span> <span class="token number">23</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'Hello World!'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: call">title: call</h2> |
|
<p>Given a key and a set of arguments, call them when given a context.</p> |
|
<ul> |
|
<li>Use a closure to call <code>key</code> with <code>args</code> for the given <code>context</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">call</span> <span class="token operator">=</span> <span class="token punctuation">(</span>key<span class="token punctuation">,</span> <span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> context <span class="token operator">=></span> context<span class="token punctuation">[</span>key<span class="token punctuation">]</span><span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript">Promise<span class="token punctuation">.</span><span class="token function">resolve</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token function">call</span><span class="token punctuation">(</span><span class="token string">'map'</span><span class="token punctuation">,</span> x <span class="token operator">=></span> <span class="token number">2</span> <span class="token operator">*</span> x<span class="token punctuation">)</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span>console<span class="token punctuation">.</span>log<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [ 2, 4, 6 ]</span> |
|
<span class="token keyword keyword-const">const</span> map <span class="token operator">=</span> call<span class="token punctuation">.</span><span class="token function">bind</span><span class="token punctuation">(</span><span class="token keyword keyword-null">null</span><span class="token punctuation">,</span> <span class="token string">'map'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
Promise<span class="token punctuation">.</span><span class="token function">resolve</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token function">map</span><span class="token punctuation">(</span>x <span class="token operator">=></span> <span class="token number">2</span> <span class="token operator">*</span> x<span class="token punctuation">)</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span>console<span class="token punctuation">.</span>log<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [ 2, 4, 6 ]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: capitalize">title: capitalize</h2> |
|
<p>Capitalizes the first letter of a string.</p> |
|
<ul> |
|
<li>Use array destructuring and <code>String.prototype.toUpperCase()</code> to capitalize the first letter of the string.</li> |
|
<li>Use <code>Array.prototype.join('')</code> to combine the capitalized <code>first</code> with the <code>...rest</code> of the characters.</li> |
|
<li>Omit the <code>lowerRest</code> argument to keep the rest of the string intact, or set it to <code>true</code> to convert to lowercase.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">capitalize</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">[</span>first<span class="token punctuation">,</span> <span class="token operator">...</span>rest<span class="token punctuation">]</span><span class="token punctuation">,</span> lowerRest <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">)</span> <span class="token operator">=></span> |
|
first<span class="token punctuation">.</span><span class="token function">toUpperCase</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> |
|
<span class="token punctuation">(</span>lowerRest <span class="token operator">?</span> rest<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toLowerCase</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">:</span> rest<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">capitalize</span><span class="token punctuation">(</span><span class="token string">'fooBar'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'FooBar'</span> |
|
<span class="token function">capitalize</span><span class="token punctuation">(</span><span class="token string">'fooBar'</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'Foobar'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: capitalizeEveryWord">title: capitalizeEveryWord</h2> |
|
<p>Capitalizes the first letter of every word in a string.</p> |
|
<ul> |
|
<li>Use <code>String.prototype.replace()</code> to match the first character of each word and <code>String.prototype.toUpperCase()</code> to capitalize it.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">capitalizeEveryWord</span> <span class="token operator">=</span> str <span class="token operator">=></span> |
|
str<span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token regex">/\b[a-z]/g</span><span class="token punctuation">,</span> char <span class="token operator">=></span> char<span class="token punctuation">.</span><span class="token function">toUpperCase</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">capitalizeEveryWord</span><span class="token punctuation">(</span><span class="token string">'hello world!'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'Hello World!'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: cartesianProduct">title: cartesianProduct</h2> |
|
<p>Calculates the cartesian product of two arrays.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.reduce()</code>, <code>Array.prototype.map()</code> and the spread operator (<code>...</code>) to generate all possible element pairs from the two arrays.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">cartesianProduct</span> <span class="token operator">=</span> <span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
a<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span><span class="token punctuation">(</span>p<span class="token punctuation">,</span> x<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">[</span><span class="token operator">...</span>p<span class="token punctuation">,</span> <span class="token operator">...</span>b<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>y <span class="token operator">=></span> <span class="token punctuation">[</span>x<span class="token punctuation">,</span> y<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">cartesianProduct</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">'x'</span><span class="token punctuation">,</span> <span class="token string">'y'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// [['x', 1], ['x', 2], ['y', 1], ['y', 2]]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: castArray">title: castArray</h2> |
|
<p>Casts the provided value as an array if it's not one.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.isArray()</code> to determine if <code>val</code> is an array and return it as-is or encapsulated in an array accordingly.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">castArray</span> <span class="token operator">=</span> val <span class="token operator">=></span> <span class="token punctuation">(</span>Array<span class="token punctuation">.</span><span class="token function">isArray</span><span class="token punctuation">(</span>val<span class="token punctuation">)</span> <span class="token operator">?</span> val <span class="token punctuation">:</span> <span class="token punctuation">[</span>val<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">castArray</span><span class="token punctuation">(</span><span class="token string">'foo'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// ['foo']</span> |
|
<span class="token function">castArray</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [1]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: celsiusToFahrenheit<br> |
|
unlisted: true">title: celsiusToFahrenheit<br> |
|
unlisted: true</h2> |
|
<p>Converts Celsius to Fahrenheit.</p> |
|
<ul> |
|
<li>Follow the conversion formula <code>F = 1.8 * C + 32</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">celsiusToFahrenheit</span> <span class="token operator">=</span> degrees <span class="token operator">=></span> <span class="token number">1.8</span> <span class="token operator">*</span> degrees <span class="token operator">+</span> <span class="token number">32</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">celsiusToFahrenheit</span><span class="token punctuation">(</span><span class="token number">33</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 91.4</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: chainAsync">title: chainAsync</h2> |
|
<p>Chains asynchronous functions.</p> |
|
<ul> |
|
<li>Loop through an array of functions containing asynchronous events, calling <code>next</code> when each asynchronous event has completed.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">chainAsync</span> <span class="token operator">=</span> fns <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-let">let</span> curr <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> last <span class="token operator">=</span> fns<span class="token punctuation">[</span>fns<span class="token punctuation">.</span>length <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> <span class="token function-variable function">next</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> fn <span class="token operator">=</span> fns<span class="token punctuation">[</span>curr<span class="token operator">++</span><span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
fn <span class="token operator">===</span> last <span class="token operator">?</span> <span class="token function">fn</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">:</span> <span class="token function">fn</span><span class="token punctuation">(</span>next<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
<span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">chainAsync</span><span class="token punctuation">(</span><span class="token punctuation">[</span> |
|
next <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'0 seconds'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token function">setTimeout</span><span class="token punctuation">(</span>next<span class="token punctuation">,</span> <span class="token number">1000</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">,</span> |
|
next <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'1 second'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token function">setTimeout</span><span class="token punctuation">(</span>next<span class="token punctuation">,</span> <span class="token number">1000</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'2 second'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: changeLightness">title: changeLightness</h2> |
|
<p>Changes the lightness value of an <code>hsl()</code> color string.</p> |
|
<ul> |
|
<li>Use <code>String.prototype.match()</code> to get an array of 3 strings with the numeric values.</li> |
|
<li>Use <code>Array.prototype.map()</code> in combination with <code>Number</code> to convert them into an array of numeric values.</li> |
|
<li>Make sure the lightness is within the valid range (between <code>0</code> and <code>100</code>), using <code>Math.max()</code> and <code>Math.min()</code>.</li> |
|
<li>Use a template literal to create a new <code>hsl()</code> string with the updated value.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">changeLightness</span> <span class="token operator">=</span> <span class="token punctuation">(</span>delta<span class="token punctuation">,</span> hslStr<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> <span class="token punctuation">[</span>hue<span class="token punctuation">,</span> saturation<span class="token punctuation">,</span> lightness<span class="token punctuation">]</span> <span class="token operator">=</span> hslStr<span class="token punctuation">.</span><span class="token function">match</span><span class="token punctuation">(</span><span class="token regex">/\d+/g</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>Number<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
|
|
<span class="token keyword keyword-const">const</span> newLightness <span class="token operator">=</span> Math<span class="token punctuation">.</span><span class="token function">max</span><span class="token punctuation">(</span> |
|
<span class="token number">0</span><span class="token punctuation">,</span> |
|
Math<span class="token punctuation">.</span><span class="token function">min</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">,</span> lightness <span class="token operator">+</span> <span class="token function">parseFloat</span><span class="token punctuation">(</span>delta<span class="token punctuation">)</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
|
|
<span class="token keyword keyword-return">return</span> <span class="token template-string"><span class="token string">`hsl(</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>hue<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">, </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>saturation<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">%, </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>newLightness<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">%)`</span></span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">changeLightness</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token string">'hsl(330, 50%, 50%)'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'hsl(330, 50%, 60%)'</span> |
|
<span class="token function">changeLightness</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token string">'hsl(330, 50%, 50%)'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'hsl(330, 50%, 40%)'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: checkProp">title: checkProp</h2> |
|
<p>Creates a function that will invoke a predicate function for the specified property on a given object.</p> |
|
<ul> |
|
<li>Return a curried function, that will invoke <code>predicate</code> for the specified <code>prop</code> on <code>obj</code> and return a boolean.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">checkProp</span> <span class="token operator">=</span> <span class="token punctuation">(</span>predicate<span class="token punctuation">,</span> prop<span class="token punctuation">)</span> <span class="token operator">=></span> obj <span class="token operator">=></span> <span class="token operator">!</span><span class="token operator">!</span><span class="token function">predicate</span><span class="token punctuation">(</span>obj<span class="token punctuation">[</span>prop<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> lengthIs4 <span class="token operator">=</span> <span class="token function">checkProp</span><span class="token punctuation">(</span>l <span class="token operator">=></span> l <span class="token operator">===</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token string">'length'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token function">lengthIs4</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> |
|
<span class="token function">lengthIs4</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
<span class="token function">lengthIs4</span><span class="token punctuation">(</span><span class="token keyword keyword-new">new</span> <span class="token class-name">Set</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false (Set uses Size, not length)</span> |
|
|
|
<span class="token keyword keyword-const">const</span> session <span class="token operator">=</span> <span class="token punctuation">{</span> user<span class="token punctuation">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> validUserSession <span class="token operator">=</span> <span class="token function">checkProp</span><span class="token punctuation">(</span>u <span class="token operator">=></span> u<span class="token punctuation">.</span>active <span class="token operator">&&</span> <span class="token operator">!</span>u<span class="token punctuation">.</span>disabled<span class="token punctuation">,</span> <span class="token string">'user'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
|
|
<span class="token function">validUserSession</span><span class="token punctuation">(</span>session<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> |
|
|
|
session<span class="token punctuation">.</span>user<span class="token punctuation">.</span>active <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span> |
|
<span class="token function">validUserSession</span><span class="token punctuation">(</span>session<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
|
|
<span class="token keyword keyword-const">const</span> noLength <span class="token operator">=</span> <span class="token function">checkProp</span><span class="token punctuation">(</span>l <span class="token operator">=></span> l <span class="token operator">===</span> undefined<span class="token punctuation">,</span> <span class="token string">'length'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token function">noLength</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> |
|
<span class="token function">noLength</span><span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
<span class="token function">noLength</span><span class="token punctuation">(</span><span class="token keyword keyword-new">new</span> <span class="token class-name">Set</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: chunk">title: chunk</h2> |
|
<p>Chunks an array into smaller arrays of a specified size.</p> |
|
<ul> |
|
<li>Use <code>Array.from()</code> to create a new array, that fits the number of chunks that will be produced.</li> |
|
<li>Use <code>Array.prototype.slice()</code> to map each element of the new array to a chunk the length of <code>size</code>.</li> |
|
<li>If the original array can't be split evenly, the final chunk will contain the remaining elements.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">chunk</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> size<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
Array<span class="token punctuation">.</span><span class="token keyword keyword-from">from</span><span class="token punctuation">(</span><span class="token punctuation">{</span> length<span class="token punctuation">:</span> Math<span class="token punctuation">.</span><span class="token function">ceil</span><span class="token punctuation">(</span>arr<span class="token punctuation">.</span>length <span class="token operator">/</span> size<span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">(</span>v<span class="token punctuation">,</span> i<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
arr<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span>i <span class="token operator">*</span> size<span class="token punctuation">,</span> i <span class="token operator">*</span> size <span class="token operator">+</span> size<span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">chunk</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [[1, 2], [3, 4], [5]]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: chunkIntoN">title: chunkIntoN</h2> |
|
<p>Chunks an array into <code>n</code> smaller arrays.</p> |
|
<ul> |
|
<li>Use <code>Math.ceil()</code> and <code>Array.prototype.length</code> to get the size of each chunk.</li> |
|
<li>Use <code>Array.from()</code> to create a new array of size <code>n</code>.</li> |
|
<li>Use <code>Array.prototype.slice()</code> to map each element of the new array to a chunk the length of <code>size</code>.</li> |
|
<li>If the original array can't be split evenly, the final chunk will contain the remaining elements.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">chunkIntoN</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> n<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> size <span class="token operator">=</span> Math<span class="token punctuation">.</span><span class="token function">ceil</span><span class="token punctuation">(</span>arr<span class="token punctuation">.</span>length <span class="token operator">/</span> n<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> Array<span class="token punctuation">.</span><span class="token keyword keyword-from">from</span><span class="token punctuation">(</span><span class="token punctuation">{</span> length<span class="token punctuation">:</span> n <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">(</span>v<span class="token punctuation">,</span> i<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
arr<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span>i <span class="token operator">*</span> size<span class="token punctuation">,</span> i <span class="token operator">*</span> size <span class="token operator">+</span> size<span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">chunkIntoN</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [[1, 2], [3, 4], [5, 6], [7]]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: chunkify">title: chunkify</h2> |
|
<p>Chunks an iterable into smaller arrays of a specified size.</p> |
|
<ul> |
|
<li>Use a <code>for...of</code> loop over the given iterable, using <code>Array.prototype.push()</code> to add each new value to the current <code>chunk</code>.</li> |
|
<li>Use <code>Array.prototype.length</code> to check if the current <code>chunk</code> is of the desired <code>size</code> and <code>yield</code> the value if it is.</li> |
|
<li>Finally, use <code>Array.prototype.length</code> to check the final <code>chunk</code> and <code>yield</code> it if it's non-empty.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">chunkify</span> <span class="token operator">=</span> <span class="token keyword keyword-function">function</span><span class="token operator">*</span> <span class="token punctuation">(</span>itr<span class="token punctuation">,</span> size<span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-let">let</span> chunk <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-for">for</span> <span class="token punctuation">(</span><span class="token keyword keyword-const">const</span> v <span class="token keyword keyword-of">of</span> itr<span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
chunk<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>v<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>chunk<span class="token punctuation">.</span>length <span class="token operator">===</span> size<span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-yield">yield</span> chunk<span class="token punctuation">;</span> |
|
chunk <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>chunk<span class="token punctuation">.</span>length<span class="token punctuation">)</span> <span class="token keyword keyword-yield">yield</span> chunk<span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> x <span class="token operator">=</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Set</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">[</span><span class="token operator">...</span><span class="token function">chunkify</span><span class="token punctuation">(</span>x<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// [[1, 2], [3, 4], [5]]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: clampNumber">title: clampNumber</h2> |
|
<p>Clamps <code>num</code> within the inclusive range specified by the boundary values <code>a</code> and <code>b</code>.</p> |
|
<ul> |
|
<li>If <code>num</code> falls within the range, return <code>num</code>.</li> |
|
<li>Otherwise, return the nearest number in the range.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">clampNumber</span> <span class="token operator">=</span> <span class="token punctuation">(</span>num<span class="token punctuation">,</span> a<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
Math<span class="token punctuation">.</span><span class="token function">max</span><span class="token punctuation">(</span>Math<span class="token punctuation">.</span><span class="token function">min</span><span class="token punctuation">(</span>num<span class="token punctuation">,</span> Math<span class="token punctuation">.</span><span class="token function">max</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Math<span class="token punctuation">.</span><span class="token function">min</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">clampNumber</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 3</span> |
|
<span class="token function">clampNumber</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// -1</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: cloneRegExp">title: cloneRegExp</h2> |
|
<p>Clones a regular expression.</p> |
|
<ul> |
|
<li>Use <code>new RegExp()</code>, <code>RegExp.prototype.source</code> and <code>RegExp.prototype.flags</code> to clone the given regular expression.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">cloneRegExp</span> <span class="token operator">=</span> regExp <span class="token operator">=></span> <span class="token keyword keyword-new">new</span> <span class="token class-name">RegExp</span><span class="token punctuation">(</span>regExp<span class="token punctuation">.</span>source<span class="token punctuation">,</span> regExp<span class="token punctuation">.</span>flags<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> regExp <span class="token operator">=</span> <span class="token regex">/lorem ipsum/gi</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> regExp2 <span class="token operator">=</span> <span class="token function">cloneRegExp</span><span class="token punctuation">(</span>regExp<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// regExp !== regExp2</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: coalesce">title: coalesce</h2> |
|
<p>Returns the first defined, non-null argument.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.find()</code> and <code>Array.prototype.includes()</code> to find the first value that is not equal to <code>undefined</code> or <code>null</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">coalesce</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> args<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span>v <span class="token operator">=></span> <span class="token operator">!</span><span class="token punctuation">[</span>undefined<span class="token punctuation">,</span> <span class="token keyword keyword-null">null</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">includes</span><span class="token punctuation">(</span>v<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">coalesce</span><span class="token punctuation">(</span><span class="token keyword keyword-null">null</span><span class="token punctuation">,</span> undefined<span class="token punctuation">,</span> <span class="token string">''</span><span class="token punctuation">,</span> <span class="token number">NaN</span><span class="token punctuation">,</span> <span class="token string">'Waldo'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// ''</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: coalesceFactory">title: coalesceFactory</h2> |
|
<p>Customizes a coalesce function that returns the first argument which is true based on the given validator.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.find()</code> to return the first argument that returns <code>true</code> from the provided argument validation function, <code>valid</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">coalesceFactory</span> <span class="token operator">=</span> valid <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> args<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span>valid<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> customCoalesce <span class="token operator">=</span> <span class="token function">coalesceFactory</span><span class="token punctuation">(</span> |
|
v <span class="token operator">=></span> <span class="token operator">!</span><span class="token punctuation">[</span><span class="token keyword keyword-null">null</span><span class="token punctuation">,</span> undefined<span class="token punctuation">,</span> <span class="token string">''</span><span class="token punctuation">,</span> <span class="token number">NaN</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">includes</span><span class="token punctuation">(</span>v<span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token function">customCoalesce</span><span class="token punctuation">(</span>undefined<span class="token punctuation">,</span> <span class="token keyword keyword-null">null</span><span class="token punctuation">,</span> <span class="token number">NaN</span><span class="token punctuation">,</span> <span class="token string">''</span><span class="token punctuation">,</span> <span class="token string">'Waldo'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'Waldo'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: collectInto">title: collectInto</h2> |
|
<p>Changes a function that accepts an array into a variadic function.</p> |
|
<ul> |
|
<li>Given a function, return a closure that collects all inputs into an array-accepting function.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">collectInto</span> <span class="token operator">=</span> fn <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token function">fn</span><span class="token punctuation">(</span>args<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> Pall <span class="token operator">=</span> <span class="token function">collectInto</span><span class="token punctuation">(</span>Promise<span class="token punctuation">.</span>all<span class="token punctuation">.</span><span class="token function">bind</span><span class="token punctuation">(</span>Promise<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-let">let</span> p1 <span class="token operator">=</span> Promise<span class="token punctuation">.</span><span class="token function">resolve</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-let">let</span> p2 <span class="token operator">=</span> Promise<span class="token punctuation">.</span><span class="token function">resolve</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-let">let</span> p3 <span class="token operator">=</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Promise</span><span class="token punctuation">(</span>resolve <span class="token operator">=></span> <span class="token function">setTimeout</span><span class="token punctuation">(</span>resolve<span class="token punctuation">,</span> <span class="token number">2000</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token function">Pall</span><span class="token punctuation">(</span>p1<span class="token punctuation">,</span> p2<span class="token punctuation">,</span> p3<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span>console<span class="token punctuation">.</span>log<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [1, 2, 3] (after about 2 seconds)</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: colorize">title: colorize</h2> |
|
<p>Adds special characters to text to print in color in the console (combined with <code>console.log()</code>).</p> |
|
<ul> |
|
<li>Use template literals and special characters to add the appropriate color code to the string output.</li> |
|
<li>For background colors, add a special character that resets the background color at the end of the string.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">colorize</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token punctuation">{</span> |
|
black<span class="token punctuation">:</span> <span class="token template-string"><span class="token string">`\x1b[30m</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>args<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">' '</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">`</span></span><span class="token punctuation">,</span> |
|
red<span class="token punctuation">:</span> <span class="token template-string"><span class="token string">`\x1b[31m</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>args<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">' '</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">`</span></span><span class="token punctuation">,</span> |
|
green<span class="token punctuation">:</span> <span class="token template-string"><span class="token string">`\x1b[32m</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>args<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">' '</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">`</span></span><span class="token punctuation">,</span> |
|
yellow<span class="token punctuation">:</span> <span class="token template-string"><span class="token string">`\x1b[33m</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>args<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">' '</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">`</span></span><span class="token punctuation">,</span> |
|
blue<span class="token punctuation">:</span> <span class="token template-string"><span class="token string">`\x1b[34m</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>args<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">' '</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">`</span></span><span class="token punctuation">,</span> |
|
magenta<span class="token punctuation">:</span> <span class="token template-string"><span class="token string">`\x1b[35m</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>args<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">' '</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">`</span></span><span class="token punctuation">,</span> |
|
cyan<span class="token punctuation">:</span> <span class="token template-string"><span class="token string">`\x1b[36m</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>args<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">' '</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">`</span></span><span class="token punctuation">,</span> |
|
white<span class="token punctuation">:</span> <span class="token template-string"><span class="token string">`\x1b[37m</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>args<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">' '</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">`</span></span><span class="token punctuation">,</span> |
|
bgBlack<span class="token punctuation">:</span> <span class="token template-string"><span class="token string">`\x1b[40m</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>args<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">' '</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">\x1b[0m`</span></span><span class="token punctuation">,</span> |
|
bgRed<span class="token punctuation">:</span> <span class="token template-string"><span class="token string">`\x1b[41m</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>args<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">' '</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">\x1b[0m`</span></span><span class="token punctuation">,</span> |
|
bgGreen<span class="token punctuation">:</span> <span class="token template-string"><span class="token string">`\x1b[42m</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>args<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">' '</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">\x1b[0m`</span></span><span class="token punctuation">,</span> |
|
bgYellow<span class="token punctuation">:</span> <span class="token template-string"><span class="token string">`\x1b[43m</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>args<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">' '</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">\x1b[0m`</span></span><span class="token punctuation">,</span> |
|
bgBlue<span class="token punctuation">:</span> <span class="token template-string"><span class="token string">`\x1b[44m</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>args<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">' '</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">\x1b[0m`</span></span><span class="token punctuation">,</span> |
|
bgMagenta<span class="token punctuation">:</span> <span class="token template-string"><span class="token string">`\x1b[45m</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>args<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">' '</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">\x1b[0m`</span></span><span class="token punctuation">,</span> |
|
bgCyan<span class="token punctuation">:</span> <span class="token template-string"><span class="token string">`\x1b[46m</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>args<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">' '</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">\x1b[0m`</span></span><span class="token punctuation">,</span> |
|
bgWhite<span class="token punctuation">:</span> <span class="token template-string"><span class="token string">`\x1b[47m</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>args<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">' '</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">\x1b[0m`</span></span> |
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript">console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token function">colorize</span><span class="token punctuation">(</span><span class="token string">'foo'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>red<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'foo' (red letters)</span> |
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token function">colorize</span><span class="token punctuation">(</span><span class="token string">'foo'</span><span class="token punctuation">,</span> <span class="token string">'bar'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>bgBlue<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'foo bar' (blue background)</span> |
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token function">colorize</span><span class="token punctuation">(</span><span class="token function">colorize</span><span class="token punctuation">(</span><span class="token string">'foo'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>yellow<span class="token punctuation">,</span> <span class="token function">colorize</span><span class="token punctuation">(</span><span class="token string">'foo'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>green<span class="token punctuation">)</span><span class="token punctuation">.</span>bgWhite<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// 'foo bar' (first word in yellow letters, second word in green letters, white background for both)</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: combine">title: combine</h2> |
|
<p>Combines two arrays of objects, using the specified key to match objects.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.reduce()</code> with an object accumulator to combine all objects in both arrays based on the given <code>prop</code>.</li> |
|
<li>Use <code>Object.values()</code> to convert the resulting object to an array and return it.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">combine</span> <span class="token operator">=</span> <span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">,</span> prop<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
Object<span class="token punctuation">.</span><span class="token function">values</span><span class="token punctuation">(</span> |
|
<span class="token punctuation">[</span><span class="token operator">...</span>a<span class="token punctuation">,</span> <span class="token operator">...</span>b<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span><span class="token punctuation">(</span>acc<span class="token punctuation">,</span> v<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>v<span class="token punctuation">[</span>prop<span class="token punctuation">]</span><span class="token punctuation">)</span> |
|
acc<span class="token punctuation">[</span>v<span class="token punctuation">[</span>prop<span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator">=</span> acc<span class="token punctuation">[</span>v<span class="token punctuation">[</span>prop<span class="token punctuation">]</span><span class="token punctuation">]</span> |
|
<span class="token operator">?</span> <span class="token punctuation">{</span> <span class="token operator">...</span>acc<span class="token punctuation">[</span>v<span class="token punctuation">[</span>prop<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token operator">...</span>v <span class="token punctuation">}</span> |
|
<span class="token punctuation">:</span> <span class="token punctuation">{</span> <span class="token operator">...</span>v <span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> acc<span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> x <span class="token operator">=</span> <span class="token punctuation">[</span> |
|
<span class="token punctuation">{</span> id<span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span> name<span class="token punctuation">:</span> <span class="token string">'John'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">{</span> id<span class="token punctuation">:</span> <span class="token number">2</span><span class="token punctuation">,</span> name<span class="token punctuation">:</span> <span class="token string">'Maria'</span> <span class="token punctuation">}</span> |
|
<span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> y <span class="token operator">=</span> <span class="token punctuation">[</span> |
|
<span class="token punctuation">{</span> id<span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span> age<span class="token punctuation">:</span> <span class="token number">28</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">{</span> id<span class="token punctuation">:</span> <span class="token number">3</span><span class="token punctuation">,</span> age<span class="token punctuation">:</span> <span class="token number">26</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">{</span> age<span class="token punctuation">:</span> <span class="token number">3</span><span class="token punctuation">}</span> |
|
<span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token function">combine</span><span class="token punctuation">(</span>x<span class="token punctuation">,</span> y<span class="token punctuation">,</span> <span class="token string">'id'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// [</span> |
|
<span class="token comment">// { id: 1, name: 'John', age: 28 },</span> |
|
<span class="token comment">// { id: 2, name: 'Maria' },</span> |
|
<span class="token comment">// { id: 3, age: 26 }</span> |
|
<span class="token comment">// ]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: compact">title: compact</h2> |
|
<p>Removes falsy values from an array.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.filter()</code> to filter out falsy values (<code>false</code>, <code>null</code>, <code>0</code>, <code>""</code>, <code>undefined</code>, and <code>NaN</code>).</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">compact</span> <span class="token operator">=</span> arr <span class="token operator">=></span> arr<span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span>Boolean<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">compact</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">''</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token string">'a'</span><span class="token punctuation">,</span> <span class="token string">'e'</span> <span class="token operator">*</span> <span class="token number">23</span><span class="token punctuation">,</span> <span class="token number">NaN</span><span class="token punctuation">,</span> <span class="token string">'s'</span><span class="token punctuation">,</span> <span class="token number">34</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// [ 1, 2, 3, 'a', 's', 34 ]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: compactObject">title: compactObject</h2> |
|
<p>Deeply removes all falsy values from an object or array.</p> |
|
<ul> |
|
<li>Use recursion.</li> |
|
<li>Initialize the iterable data, using <code>Array.isArray()</code>, <code>Array.prototype.filter()</code> and <code>Boolean</code> for arrays in order to avoid sparse arrays.</li> |
|
<li>Use <code>Object.keys()</code> and <code>Array.prototype.reduce()</code> to iterate over each key with an appropriate initial value.</li> |
|
<li>Use <code>Boolean</code> to determine the truthiness of each key's value and add it to the accumulator if it's truthy.</li> |
|
<li>Use <code>typeof</code> to determine if a given value is an <code>object</code> and call the function again to deeply compact it.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">compactObject</span> <span class="token operator">=</span> val <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> data <span class="token operator">=</span> Array<span class="token punctuation">.</span><span class="token function">isArray</span><span class="token punctuation">(</span>val<span class="token punctuation">)</span> <span class="token operator">?</span> val<span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span>Boolean<span class="token punctuation">)</span> <span class="token punctuation">:</span> val<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> Object<span class="token punctuation">.</span><span class="token function">keys</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span> |
|
<span class="token punctuation">(</span>acc<span class="token punctuation">,</span> key<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> value <span class="token operator">=</span> data<span class="token punctuation">[</span>key<span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span><span class="token function">Boolean</span><span class="token punctuation">(</span>value<span class="token punctuation">)</span><span class="token punctuation">)</span> |
|
acc<span class="token punctuation">[</span>key<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword keyword-typeof">typeof</span> value <span class="token operator">===</span> <span class="token string">'object'</span> <span class="token operator">?</span> <span class="token function">compactObject</span><span class="token punctuation">(</span>value<span class="token punctuation">)</span> <span class="token punctuation">:</span> value<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> acc<span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">,</span> |
|
Array<span class="token punctuation">.</span><span class="token function">isArray</span><span class="token punctuation">(</span>val<span class="token punctuation">)</span> <span class="token operator">?</span> <span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token punctuation">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> obj <span class="token operator">=</span> <span class="token punctuation">{</span> |
|
a<span class="token punctuation">:</span> <span class="token keyword keyword-null">null</span><span class="token punctuation">,</span> |
|
b<span class="token punctuation">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span> |
|
c<span class="token punctuation">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span> |
|
d<span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> |
|
e<span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span> |
|
f<span class="token punctuation">:</span> <span class="token string">''</span><span class="token punctuation">,</span> |
|
g<span class="token punctuation">:</span> <span class="token string">'a'</span><span class="token punctuation">,</span> |
|
h<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token keyword keyword-null">null</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">,</span> <span class="token string">''</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'a'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> |
|
i<span class="token punctuation">:</span> <span class="token punctuation">{</span> j<span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> k<span class="token punctuation">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span> l<span class="token punctuation">:</span> <span class="token string">'a'</span> <span class="token punctuation">}</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
<span class="token function">compactObject</span><span class="token punctuation">(</span>obj<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// { c: true, e: 1, g: 'a', h: [ true, 1, 'a' ], i: { l: 'a' } }</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: compactWhitespace">title: compactWhitespace</h2> |
|
<p>Compacts whitespaces in a string.</p> |
|
<ul> |
|
<li>Use <code>String.prototype.replace()</code> with a regular expression to replace all occurrences of 2 or more whitespace characters with a single space.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">compactWhitespace</span> <span class="token operator">=</span> str <span class="token operator">=></span> str<span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token regex">/\s{2,}/g</span><span class="token punctuation">,</span> <span class="token string">' '</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">compactWhitespace</span><span class="token punctuation">(</span><span class="token string">'Lorem Ipsum'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'Lorem Ipsum'</span> |
|
<span class="token function">compactWhitespace</span><span class="token punctuation">(</span><span class="token string">'Lorem \n Ipsum'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'Lorem Ipsum'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: complement">title: complement</h2> |
|
<p>Returns a function that is the logical complement of the given function, <code>fn</code>.</p> |
|
<ul> |
|
<li>Use the logical not (<code>!</code>) operator on the result of calling <code>fn</code> with any supplied <code>args</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">complement</span> <span class="token operator">=</span> fn <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token operator">!</span><span class="token function">fn</span><span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">isEven</span> <span class="token operator">=</span> num <span class="token operator">=></span> num <span class="token operator">%</span> <span class="token number">2</span> <span class="token operator">===</span> <span class="token number">0</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> isOdd <span class="token operator">=</span> <span class="token function">complement</span><span class="token punctuation">(</span>isEven<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token function">isOdd</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> |
|
<span class="token function">isOdd</span><span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: compose">title: compose</h2> |
|
<p>Performs right-to-left function composition.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.reduce()</code> to perform right-to-left function composition.</li> |
|
<li>The last (rightmost) function can accept one or more arguments; the remaining functions must be unary.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">compose</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token operator">...</span>fns<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
fns<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span><span class="token punctuation">(</span>f<span class="token punctuation">,</span> g<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token function">f</span><span class="token punctuation">(</span><span class="token function">g</span><span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">add5</span> <span class="token operator">=</span> x <span class="token operator">=></span> x <span class="token operator">+</span> <span class="token number">5</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> <span class="token function-variable function">multiply</span> <span class="token operator">=</span> <span class="token punctuation">(</span>x<span class="token punctuation">,</span> y<span class="token punctuation">)</span> <span class="token operator">=></span> x <span class="token operator">*</span> y<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> multiplyAndAdd5 <span class="token operator">=</span> <span class="token function">compose</span><span class="token punctuation">(</span> |
|
add5<span class="token punctuation">,</span> |
|
multiply |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token function">multiplyAndAdd5</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 15</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: composeRight">title: composeRight</h2> |
|
<p>Performs left-to-right function composition.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.reduce()</code> to perform left-to-right function composition.</li> |
|
<li>The first (leftmost) function can accept one or more arguments; the remaining functions must be unary.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">composeRight</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token operator">...</span>fns<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
fns<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span><span class="token punctuation">(</span>f<span class="token punctuation">,</span> g<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token function">g</span><span class="token punctuation">(</span><span class="token function">f</span><span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">add</span> <span class="token operator">=</span> <span class="token punctuation">(</span>x<span class="token punctuation">,</span> y<span class="token punctuation">)</span> <span class="token operator">=></span> x <span class="token operator">+</span> y<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> <span class="token function-variable function">square</span> <span class="token operator">=</span> x <span class="token operator">=></span> x <span class="token operator">*</span> x<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> addAndSquare <span class="token operator">=</span> <span class="token function">composeRight</span><span class="token punctuation">(</span>add<span class="token punctuation">,</span> square<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token function">addAndSquare</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 9</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: containsWhitespace">title: containsWhitespace</h2> |
|
<p>Checks if the given string contains any whitespace characters.</p> |
|
<ul> |
|
<li>Use <code>RegExp.prototype.test()</code> with an appropriate regular expression to check if the given string contains any whitespace characters.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">containsWhitespace</span> <span class="token operator">=</span> str <span class="token operator">=></span> <span class="token regex">/\s/</span><span class="token punctuation">.</span><span class="token function">test</span><span class="token punctuation">(</span>str<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">containsWhitespace</span><span class="token punctuation">(</span><span class="token string">'lorem'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> |
|
<span class="token function">containsWhitespace</span><span class="token punctuation">(</span><span class="token string">'lorem ipsum'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: converge">title: converge</h2> |
|
<p>Accepts a converging function and a list of branching functions and returns a function that applies each branching function to the arguments and the results of the branching functions are passed as arguments to the converging function.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.map()</code> and <code>Function.prototype.apply()</code> to apply each function to the given arguments.</li> |
|
<li>Use the spread operator (<code>...</code>) to call <code>converger</code> with the results of all other functions.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">converge</span> <span class="token operator">=</span> <span class="token punctuation">(</span>converger<span class="token punctuation">,</span> fns<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
<span class="token function">converger</span><span class="token punctuation">(</span><span class="token operator">...</span>fns<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>fn <span class="token operator">=></span> fn<span class="token punctuation">.</span><span class="token function">apply</span><span class="token punctuation">(</span><span class="token keyword keyword-null">null</span><span class="token punctuation">,</span> args<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> average <span class="token operator">=</span> <span class="token function">converge</span><span class="token punctuation">(</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> a <span class="token operator">/</span> b<span class="token punctuation">,</span> <span class="token punctuation">[</span> |
|
arr <span class="token operator">=></span> arr<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> v<span class="token punctuation">)</span> <span class="token operator">=></span> a <span class="token operator">+</span> v<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> |
|
arr <span class="token operator">=></span> arr<span class="token punctuation">.</span>length |
|
<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token function">average</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 4</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: copySign">title: copySign</h2> |
|
<p>Returns the absolute value of the first number, but the sign of the second.</p> |
|
<ul> |
|
<li>Use <code>Math.sign()</code> to check if the two numbers have the same sign.</li> |
|
<li>Return <code>x</code> if they do, <code>-x</code> otherwise.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">copySign</span> <span class="token operator">=</span> <span class="token punctuation">(</span>x<span class="token punctuation">,</span> y<span class="token punctuation">)</span> <span class="token operator">=></span> Math<span class="token punctuation">.</span><span class="token function">sign</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token operator">===</span> Math<span class="token punctuation">.</span><span class="token function">sign</span><span class="token punctuation">(</span>y<span class="token punctuation">)</span> <span class="token operator">?</span> x <span class="token punctuation">:</span> <span class="token operator">-</span>x<span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">copySign</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 2</span> |
|
<span class="token function">copySign</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// -2</span> |
|
<span class="token function">copySign</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 2</span> |
|
<span class="token function">copySign</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// -2</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: copyToClipboard">title: copyToClipboard</h2> |
|
<p>Copies a string to the clipboard.<br> |
|
Only works as a result of user action (i.e. inside a <code>click</code> event listener).</p> |
|
<ul> |
|
<li>Create a new <code><textarea></code> element, fill it with the supplied data and add it to the HTML document.</li> |
|
<li>Use <code>Selection.getRangeAt()</code>to store the selected range (if any).</li> |
|
<li>Use <code>Document.execCommand('copy')</code> to copy to the clipboard.</li> |
|
<li>Remove the <code><textarea></code> element from the HTML document.</li> |
|
<li>Finally, use <code>Selection().addRange()</code> to recover the original selected range (if any).</li> |
|
<li><strong>Note:</strong> You can use the new asynchronous Clipboard API to implement the same functionality. It's experimental but should be used in the future instead of this snippet. Find out more about it <a href="https://github.com/w3c/clipboard-apis/blob/master/explainer.adoc#writing-to-the-clipboard">here</a>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">copyToClipboard</span> <span class="token operator">=</span> str <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> el <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">createElement</span><span class="token punctuation">(</span><span class="token string">'textarea'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
el<span class="token punctuation">.</span>value <span class="token operator">=</span> str<span class="token punctuation">;</span> |
|
el<span class="token punctuation">.</span><span class="token function">setAttribute</span><span class="token punctuation">(</span><span class="token string">'readonly'</span><span class="token punctuation">,</span> <span class="token string">''</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
el<span class="token punctuation">.</span>style<span class="token punctuation">.</span>position <span class="token operator">=</span> <span class="token string">'absolute'</span><span class="token punctuation">;</span> |
|
el<span class="token punctuation">.</span>style<span class="token punctuation">.</span>left <span class="token operator">=</span> <span class="token string">'-9999px'</span><span class="token punctuation">;</span> |
|
document<span class="token punctuation">.</span>body<span class="token punctuation">.</span><span class="token function">appendChild</span><span class="token punctuation">(</span>el<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> selected <span class="token operator">=</span> |
|
document<span class="token punctuation">.</span><span class="token function">getSelection</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>rangeCount <span class="token operator">></span> <span class="token number">0</span> |
|
<span class="token operator">?</span> document<span class="token punctuation">.</span><span class="token function">getSelection</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getRangeAt</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">:</span> <span class="token boolean">false</span><span class="token punctuation">;</span> |
|
el<span class="token punctuation">.</span><span class="token function">select</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
document<span class="token punctuation">.</span><span class="token function">execCommand</span><span class="token punctuation">(</span><span class="token string">'copy'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
document<span class="token punctuation">.</span>body<span class="token punctuation">.</span><span class="token function">removeChild</span><span class="token punctuation">(</span>el<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>selected<span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
document<span class="token punctuation">.</span><span class="token function">getSelection</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">removeAllRanges</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
document<span class="token punctuation">.</span><span class="token function">getSelection</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">addRange</span><span class="token punctuation">(</span>selected<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">copyToClipboard</span><span class="token punctuation">(</span><span class="token string">'Lorem ipsum'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'Lorem ipsum' copied to clipboard.</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: countBy">title: countBy</h2> |
|
<p>Groups the elements of an array based on the given function and returns the count of elements in each group.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.map()</code> to map the values of an array to a function or property name.</li> |
|
<li>Use <code>Array.prototype.reduce()</code> to create an object, where the keys are produced from the mapped results.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">countBy</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> fn<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
arr<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token keyword keyword-typeof">typeof</span> fn <span class="token operator">===</span> <span class="token string">'function'</span> <span class="token operator">?</span> fn <span class="token punctuation">:</span> val <span class="token operator">=></span> val<span class="token punctuation">[</span>fn<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span><span class="token punctuation">(</span>acc<span class="token punctuation">,</span> val<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
acc<span class="token punctuation">[</span>val<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">(</span>acc<span class="token punctuation">[</span>val<span class="token punctuation">]</span> <span class="token operator">||</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> acc<span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">countBy</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">6.1</span><span class="token punctuation">,</span> <span class="token number">4.2</span><span class="token punctuation">,</span> <span class="token number">6.3</span><span class="token punctuation">]</span><span class="token punctuation">,</span> Math<span class="token punctuation">.</span>floor<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// {4: 1, 6: 2}</span> |
|
<span class="token function">countBy</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">'one'</span><span class="token punctuation">,</span> <span class="token string">'two'</span><span class="token punctuation">,</span> <span class="token string">'three'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">'length'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// {3: 2, 5: 1}</span> |
|
<span class="token function">countBy</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">{</span> count<span class="token punctuation">:</span> <span class="token number">5</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> count<span class="token punctuation">:</span> <span class="token number">10</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> count<span class="token punctuation">:</span> <span class="token number">5</span> <span class="token punctuation">}</span><span class="token punctuation">]</span><span class="token punctuation">,</span> x <span class="token operator">=></span> x<span class="token punctuation">.</span>count<span class="token punctuation">)</span> |
|
<span class="token comment">// {5: 2, 10: 1}</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: countOccurrences">title: countOccurrences</h2> |
|
<p>Counts the occurrences of a value in an array.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.reduce()</code> to increment a counter each time the specific value is encountered inside the array.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">countOccurrences</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> val<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
arr<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> v<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span>v <span class="token operator">===</span> val <span class="token operator">?</span> a <span class="token operator">+</span> <span class="token number">1</span> <span class="token punctuation">:</span> a<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">countOccurrences</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 3</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: countSubstrings">title: countSubstrings</h2> |
|
<p>Counts the occurrences of a substring in a given string.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.indexOf()</code> to look for <code>searchValue</code> in <code>str</code>.</li> |
|
<li>Increment a counter if the value is found and update the index, <code>i</code>.</li> |
|
<li>Use a <code>while</code> loop that will return as soon as the value returned from <code>Array.prototype.indexOf()</code> is <code>-1</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">countSubstrings</span> <span class="token operator">=</span> <span class="token punctuation">(</span>str<span class="token punctuation">,</span> searchValue<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-let">let</span> count <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> |
|
i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-while">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> r <span class="token operator">=</span> str<span class="token punctuation">.</span><span class="token function">indexOf</span><span class="token punctuation">(</span>searchValue<span class="token punctuation">,</span> i<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>r <span class="token operator">!==</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">[</span>count<span class="token punctuation">,</span> i<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">[</span>count <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">,</span> r <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-else">else</span> <span class="token keyword keyword-return">return</span> count<span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">countSubstrings</span><span class="token punctuation">(</span><span class="token string">'tiktok tok tok tik tok tik'</span><span class="token punctuation">,</span> <span class="token string">'tik'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 3</span> |
|
<span class="token function">countSubstrings</span><span class="token punctuation">(</span><span class="token string">'tutut tut tut'</span><span class="token punctuation">,</span> <span class="token string">'tut'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 4</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: countWeekDaysBetween">title: countWeekDaysBetween</h2> |
|
<p>Counts the weekdays between two dates.</p> |
|
<ul> |
|
<li>Use <code>Array.from()</code> to construct an array with <code>length</code> equal to the number of days between <code>startDate</code> and <code>endDate</code>.</li> |
|
<li>Use <code>Array.prototype.reduce()</code> to iterate over the array, checking if each date is a weekday and incrementing <code>count</code>.</li> |
|
<li>Update <code>startDate</code> with the next day each loop using <code>Date.prototype.getDate()</code> and <code>Date.prototype.setDate()</code> to advance it by one day.</li> |
|
<li><strong>NOTE:</strong> Does not take official holidays into account.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">countWeekDaysBetween</span> <span class="token operator">=</span> <span class="token punctuation">(</span>startDate<span class="token punctuation">,</span> endDate<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
Array |
|
<span class="token punctuation">.</span><span class="token keyword keyword-from">from</span><span class="token punctuation">(</span><span class="token punctuation">{</span> length<span class="token punctuation">:</span> <span class="token punctuation">(</span>endDate <span class="token operator">-</span> startDate<span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token punctuation">(</span><span class="token number">1000</span> <span class="token operator">*</span> <span class="token number">3600</span> <span class="token operator">*</span> <span class="token number">24</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span>count <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>startDate<span class="token punctuation">.</span><span class="token function">getDay</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">6</span> <span class="token operator">!==</span> <span class="token number">0</span><span class="token punctuation">)</span> count<span class="token operator">++</span><span class="token punctuation">;</span> |
|
startDate <span class="token operator">=</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span>startDate<span class="token punctuation">.</span><span class="token function">setDate</span><span class="token punctuation">(</span>startDate<span class="token punctuation">.</span><span class="token function">getDate</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> count<span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">countWeekDaysBetween</span><span class="token punctuation">(</span><span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token string">'Oct 05, 2020'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token string">'Oct 06, 2020'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 1</span> |
|
<span class="token function">countWeekDaysBetween</span><span class="token punctuation">(</span><span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token string">'Oct 05, 2020'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token string">'Oct 14, 2020'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 7</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: counter">title: counter</h2> |
|
<p>Creates a counter with the specified range, step and duration for the specified selector.</p> |
|
<ul> |
|
<li>Check if <code>step</code> has the proper sign and change it accordingly.</li> |
|
<li>Use <code>setInterval()</code> in combination with <code>Math.abs()</code> and <code>Math.floor()</code> to calculate the time between each new text draw.</li> |
|
<li>Use <code>Document.querySelector()</code>, <code>Element.innerHTML</code> to update the value of the selected element.</li> |
|
<li>Omit the fourth argument, <code>step</code>, to use a default step of <code>1</code>.</li> |
|
<li>Omit the fifth argument, <code>duration</code>, to use a default duration of <code>2000</code>ms.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">counter</span> <span class="token operator">=</span> <span class="token punctuation">(</span>selector<span class="token punctuation">,</span> start<span class="token punctuation">,</span> end<span class="token punctuation">,</span> step <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> duration <span class="token operator">=</span> <span class="token number">2000</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-let">let</span> current <span class="token operator">=</span> start<span class="token punctuation">,</span> |
|
_step <span class="token operator">=</span> <span class="token punctuation">(</span>end <span class="token operator">-</span> start<span class="token punctuation">)</span> <span class="token operator">*</span> step <span class="token operator"><</span> <span class="token number">0</span> <span class="token operator">?</span> <span class="token operator">-</span>step <span class="token punctuation">:</span> step<span class="token punctuation">,</span> |
|
timer <span class="token operator">=</span> <span class="token function">setInterval</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
current <span class="token operator">+=</span> _step<span class="token punctuation">;</span> |
|
document<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span>selector<span class="token punctuation">)</span><span class="token punctuation">.</span>innerHTML <span class="token operator">=</span> current<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>current <span class="token operator">>=</span> end<span class="token punctuation">)</span> document<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span>selector<span class="token punctuation">)</span><span class="token punctuation">.</span>innerHTML <span class="token operator">=</span> end<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>current <span class="token operator">>=</span> end<span class="token punctuation">)</span> <span class="token function">clearInterval</span><span class="token punctuation">(</span>timer<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">,</span> Math<span class="token punctuation">.</span><span class="token function">abs</span><span class="token punctuation">(</span>Math<span class="token punctuation">.</span><span class="token function">floor</span><span class="token punctuation">(</span>duration <span class="token operator">/</span> <span class="token punctuation">(</span>end <span class="token operator">-</span> start<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> timer<span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">counter</span><span class="token punctuation">(</span><span class="token string">'#my-id'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1000</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">2000</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// Creates a 2-second timer for the element with id="my-id"</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: createDirIfNotExists">title: createDirIfNotExists</h2> |
|
<p>Creates a directory, if it does not exist.</p> |
|
<ul> |
|
<li>Use <code>fs.existsSync()</code> to check if the directory exists, <code>fs.mkdirSync()</code> to create it.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> fs <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'fs'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
|
|
<span class="token keyword keyword-const">const</span> <span class="token function-variable function">createDirIfNotExists</span> <span class="token operator">=</span> dir <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token operator">!</span>fs<span class="token punctuation">.</span><span class="token function">existsSync</span><span class="token punctuation">(</span>dir<span class="token punctuation">)</span> <span class="token operator">?</span> fs<span class="token punctuation">.</span><span class="token function">mkdirSync</span><span class="token punctuation">(</span>dir<span class="token punctuation">)</span> <span class="token punctuation">:</span> undefined<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">createDirIfNotExists</span><span class="token punctuation">(</span><span class="token string">'test'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// creates the directory 'test', if it doesn't exist</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: createElement">title: createElement</h2> |
|
<p>Creates an element from a string (without appending it to the document).<br> |
|
If the given string contains multiple elements, only the first one will be returned.</p> |
|
<ul> |
|
<li>Use <code>Document.createElement()</code> to create a new element.</li> |
|
<li>Use <code>Element.innerHTML</code> to set its inner HTML to the string supplied as the argument.</li> |
|
<li>Use <code>ParentNode.firstElementChild</code> to return the element version of the string.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">createElement</span> <span class="token operator">=</span> str <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> el <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">createElement</span><span class="token punctuation">(</span><span class="token string">'div'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
el<span class="token punctuation">.</span>innerHTML <span class="token operator">=</span> str<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> el<span class="token punctuation">.</span>firstElementChild<span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> el <span class="token operator">=</span> <span class="token function">createElement</span><span class="token punctuation">(</span> |
|
<span class="token template-string"><span class="token string">`<div class="container"> |
|
<p>Hello!</p> |
|
</div>`</span></span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>el<span class="token punctuation">.</span>className<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'container'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: createEventHub">title: createEventHub</h2> |
|
<p>Creates a pub/sub (<a href="https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern">publish–subscribe</a>) event hub with <code>emit</code>, <code>on</code>, and <code>off</code> methods.</p> |
|
<ul> |
|
<li>Use <code>Object.create(null)</code> to create an empty <code>hub</code> object that does not inherit properties from <code>Object.prototype</code>.</li> |
|
<li>For <code>emit</code>, resolve the array of handlers based on the <code>event</code> argument and then run each one with <code>Array.prototype.forEach()</code> by passing in the data as an argument.</li> |
|
<li>For <code>on</code>, create an array for the event if it does not yet exist, then use <code>Array.prototype.push()</code> to add the handler</li> |
|
<li>to the array.</li> |
|
<li>For <code>off</code>, use <code>Array.prototype.findIndex()</code> to find the index of the handler in the event array and remove it using <code>Array.prototype.splice()</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">createEventHub</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token punctuation">{</span> |
|
hub<span class="token punctuation">:</span> Object<span class="token punctuation">.</span><span class="token function">create</span><span class="token punctuation">(</span><span class="token keyword keyword-null">null</span><span class="token punctuation">)</span><span class="token punctuation">,</span> |
|
<span class="token function">emit</span><span class="token punctuation">(</span>event<span class="token punctuation">,</span> data<span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token punctuation">(</span><span class="token keyword keyword-this">this</span><span class="token punctuation">.</span>hub<span class="token punctuation">[</span>event<span class="token punctuation">]</span> <span class="token operator">||</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span>handler <span class="token operator">=></span> <span class="token function">handler</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">,</span> |
|
<span class="token function">on</span><span class="token punctuation">(</span>event<span class="token punctuation">,</span> handler<span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token keyword keyword-this">this</span><span class="token punctuation">.</span>hub<span class="token punctuation">[</span>event<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span>hub<span class="token punctuation">[</span>event<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-this">this</span><span class="token punctuation">.</span>hub<span class="token punctuation">[</span>event<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>handler<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">,</span> |
|
<span class="token function">off</span><span class="token punctuation">(</span>event<span class="token punctuation">,</span> handler<span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> i <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword keyword-this">this</span><span class="token punctuation">.</span>hub<span class="token punctuation">[</span>event<span class="token punctuation">]</span> <span class="token operator">||</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">findIndex</span><span class="token punctuation">(</span>h <span class="token operator">=></span> h <span class="token operator">===</span> handler<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>i <span class="token operator">></span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span>hub<span class="token punctuation">[</span>event<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">splice</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span><span class="token keyword keyword-this">this</span><span class="token punctuation">.</span>hub<span class="token punctuation">[</span>event<span class="token punctuation">]</span><span class="token punctuation">.</span>length <span class="token operator">===</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token keyword keyword-delete">delete</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span>hub<span class="token punctuation">[</span>event<span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">handler</span> <span class="token operator">=</span> data <span class="token operator">=></span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> hub <span class="token operator">=</span> <span class="token function">createEventHub</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-let">let</span> increment <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> |
|
|
|
<span class="token comment">// Subscribe: listen for different types of events</span> |
|
hub<span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token string">'message'</span><span class="token punctuation">,</span> handler<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
hub<span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token string">'message'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'Message event fired'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
hub<span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token string">'increment'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> increment<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
|
|
<span class="token comment">// Publish: emit events to invoke all handlers subscribed to them, passing the data to them as an argument</span> |
|
hub<span class="token punctuation">.</span><span class="token function">emit</span><span class="token punctuation">(</span><span class="token string">'message'</span><span class="token punctuation">,</span> <span class="token string">'hello world'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// logs 'hello world' and 'Message event fired'</span> |
|
hub<span class="token punctuation">.</span><span class="token function">emit</span><span class="token punctuation">(</span><span class="token string">'message'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> hello<span class="token punctuation">:</span> <span class="token string">'world'</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// logs the object and 'Message event fired'</span> |
|
hub<span class="token punctuation">.</span><span class="token function">emit</span><span class="token punctuation">(</span><span class="token string">'increment'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// `increment` variable is now 1</span> |
|
|
|
<span class="token comment">// Unsubscribe: stop a specific handler from listening to the 'message' event</span> |
|
hub<span class="token punctuation">.</span><span class="token function">off</span><span class="token punctuation">(</span><span class="token string">'message'</span><span class="token punctuation">,</span> handler<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: currentURL">title: currentURL</h2> |
|
<p>Returns the current URL.</p> |
|
<ul> |
|
<li>Use <code>Window.location.href</code> to get the current URL.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">currentURL</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> window<span class="token punctuation">.</span>location<span class="token punctuation">.</span>href<span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">currentURL</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'https://www.google.com/'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: curry">title: curry</h2> |
|
<p>Curries a function.</p> |
|
<ul> |
|
<li>Use recursion.</li> |
|
<li>If the number of provided arguments (<code>args</code>) is sufficient, call the passed function <code>fn</code>.</li> |
|
<li>Otherwise, use <code>Function.prototype.bind()</code> to return a curried function <code>fn</code> that expects the rest of the arguments.</li> |
|
<li>If you want to curry a function that accepts a variable number of arguments (a variadic function, e.g. <code>Math.min()</code>), you can optionally pass the number of arguments to the second parameter <code>arity</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">curry</span> <span class="token operator">=</span> <span class="token punctuation">(</span>fn<span class="token punctuation">,</span> arity <span class="token operator">=</span> fn<span class="token punctuation">.</span>length<span class="token punctuation">,</span> <span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
arity <span class="token operator"><=</span> args<span class="token punctuation">.</span>length <span class="token operator">?</span> <span class="token function">fn</span><span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token punctuation">:</span> curry<span class="token punctuation">.</span><span class="token function">bind</span><span class="token punctuation">(</span><span class="token keyword keyword-null">null</span><span class="token punctuation">,</span> fn<span class="token punctuation">,</span> arity<span class="token punctuation">,</span> <span class="token operator">...</span>args<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">curry</span><span class="token punctuation">(</span>Math<span class="token punctuation">.</span>pow<span class="token punctuation">)</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 1024</span> |
|
<span class="token function">curry</span><span class="token punctuation">(</span>Math<span class="token punctuation">.</span>min<span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">(</span><span class="token number">50</span><span class="token punctuation">)</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 2</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: cycleGenerator">title: cycleGenerator</h2> |
|
<p>Creates a generator, looping over the given array indefinitely.</p> |
|
<ul> |
|
<li>Use a non-terminating <code>while</code> loop, that will <code>yield</code> a value every time <code>Generator.prototype.next()</code> is called.</li> |
|
<li>Use the module operator (<code>%</code>) with <code>Array.prototype.length</code> to get the next value's index and increment the counter after each <code>yield</code> statement.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">cycleGenerator</span> <span class="token operator">=</span> <span class="token keyword keyword-function">function</span><span class="token operator">*</span> <span class="token punctuation">(</span>arr<span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-let">let</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-while">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-yield">yield</span> arr<span class="token punctuation">[</span>i <span class="token operator">%</span> arr<span class="token punctuation">.</span>length<span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
i<span class="token operator">++</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> binaryCycle <span class="token operator">=</span> <span class="token function">cycleGenerator</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
binaryCycle<span class="token punctuation">.</span><span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// { value: 0, done: false }</span> |
|
binaryCycle<span class="token punctuation">.</span><span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// { value: 1, done: false }</span> |
|
binaryCycle<span class="token punctuation">.</span><span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// { value: 0, done: false }</span> |
|
binaryCycle<span class="token punctuation">.</span><span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// { value: 1, done: false }</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: dateRangeGenerator">title: dateRangeGenerator</h2> |
|
<p>Creates a generator, that generates all dates in the given range using the given step.</p> |
|
<ul> |
|
<li>Use a <code>while</code> loop to iterate from <code>start</code> to <code>end</code>, using <code>yield</code> to return each date in the range, using the <code>Date</code> constructor.</li> |
|
<li>Use <code>Date.prototype.getDate()</code> and <code>Date.prototype.setDate()</code> to increment by <code>step</code> days after returning each subsequent value.</li> |
|
<li>Omit the third argument, <code>step</code>, to use a default value of <code>1</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">dateRangeGenerator</span> <span class="token operator">=</span> <span class="token keyword keyword-function">function</span><span class="token operator">*</span> <span class="token punctuation">(</span>start<span class="token punctuation">,</span> end<span class="token punctuation">,</span> step <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-let">let</span> d <span class="token operator">=</span> start<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-while">while</span> <span class="token punctuation">(</span>d <span class="token operator"><</span> end<span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-yield">yield</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span>d<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
d<span class="token punctuation">.</span><span class="token function">setDate</span><span class="token punctuation">(</span>d<span class="token punctuation">.</span><span class="token function">getDate</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> step<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token punctuation">[</span><span class="token operator">...</span><span class="token function">dateRangeGenerator</span><span class="token punctuation">(</span><span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token string">'2021-06-01'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token string">'2021-06-04'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token comment">// [ 2021-06-01, 2021-06-02, 2021-06-03 ]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: dayName">title: dayName</h2> |
|
<p>Gets the name of the weekday from a <code>Date</code> object.</p> |
|
<ul> |
|
<li>Use <code>Date.prototype.toLocaleDateString()</code> with the <code>{ weekday: 'long' }</code> option to retrieve the weekday.</li> |
|
<li>Use the optional second argument to get a language-specific name or omit it to use the default locale.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">dayName</span> <span class="token operator">=</span> <span class="token punctuation">(</span>date<span class="token punctuation">,</span> locale<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
date<span class="token punctuation">.</span><span class="token function">toLocaleDateString</span><span class="token punctuation">(</span>locale<span class="token punctuation">,</span> <span class="token punctuation">{</span> weekday<span class="token punctuation">:</span> <span class="token string">'long'</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">dayName</span><span class="token punctuation">(</span><span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'Saturday'</span> |
|
<span class="token function">dayName</span><span class="token punctuation">(</span><span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token string">'09/23/2020'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">'de-DE'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'Samstag'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: dayOfYear">title: dayOfYear</h2> |
|
<p>Gets the day of the year (number in the range 1-366) from a <code>Date</code> object.</p> |
|
<ul> |
|
<li>Use <code>new Date()</code> and <code>Date.prototype.getFullYear()</code> to get the first day of the year as a <code>Date</code> object.</li> |
|
<li>Subtract the first day of the year from <code>date</code> and divide with the milliseconds in each day to get the result.</li> |
|
<li>Use <code>Math.floor()</code> to appropriately round the resulting day count to an integer.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">dayOfYear</span> <span class="token operator">=</span> date <span class="token operator">=></span> |
|
Math<span class="token punctuation">.</span><span class="token function">floor</span><span class="token punctuation">(</span><span class="token punctuation">(</span>date <span class="token operator">-</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span>date<span class="token punctuation">.</span><span class="token function">getFullYear</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token number">1000</span> <span class="token operator">/</span> <span class="token number">60</span> <span class="token operator">/</span> <span class="token number">60</span> <span class="token operator">/</span> <span class="token number">24</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">dayOfYear</span><span class="token punctuation">(</span><span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 272</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: daysAgo">title: daysAgo</h2> |
|
<p>Calculates the date of <code>n</code> days ago from today as a string representation.</p> |
|
<ul> |
|
<li>Use <code>new Date()</code> to get the current date, <code>Math.abs()</code> and <code>Date.prototype.getDate()</code> to update the date accordingly and set to the result using <code>Date.prototype.setDate()</code>.</li> |
|
<li>Use <code>Date.prototype.toISOString()</code> to return a string in <code>yyyy-mm-dd</code> format.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">daysAgo</span> <span class="token operator">=</span> n <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-let">let</span> d <span class="token operator">=</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
d<span class="token punctuation">.</span><span class="token function">setDate</span><span class="token punctuation">(</span>d<span class="token punctuation">.</span><span class="token function">getDate</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-</span> Math<span class="token punctuation">.</span><span class="token function">abs</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> d<span class="token punctuation">.</span><span class="token function">toISOString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span><span class="token string">'T'</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">daysAgo</span><span class="token punctuation">(</span><span class="token number">20</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 2020-09-16 (if current date is 2020-10-06)</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: daysFromNow">title: daysFromNow</h2> |
|
<p>Calculates the date of <code>n</code> days from today as a string representation.</p> |
|
<ul> |
|
<li>Use <code>new Date()</code> to get the current date, <code>Math.abs()</code> and <code>Date.prototype.getDate()</code> to update the date accordingly and set to the result using <code>Date.prototype.setDate()</code>.</li> |
|
<li>Use <code>Date.prototype.toISOString()</code> to return a string in <code>yyyy-mm-dd</code> format.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">daysFromNow</span> <span class="token operator">=</span> n <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-let">let</span> d <span class="token operator">=</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
d<span class="token punctuation">.</span><span class="token function">setDate</span><span class="token punctuation">(</span>d<span class="token punctuation">.</span><span class="token function">getDate</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> Math<span class="token punctuation">.</span><span class="token function">abs</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> d<span class="token punctuation">.</span><span class="token function">toISOString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span><span class="token string">'T'</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">daysFromNow</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 2020-10-13 (if current date is 2020-10-08)</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: daysInMonth">title: daysInMonth</h2> |
|
<p>Gets the number of days in the given <code>month</code> of the specified <code>year</code>.</p> |
|
<ul> |
|
<li>Use the <code>new Date()</code> constructor to create a date from the given <code>year</code> and <code>month</code>.</li> |
|
<li>Set the days parameter to <code>0</code> to get the last day of the previous month, as months are zero-indexed.</li> |
|
<li>Use <code>Date.prototype.getDate()</code> to return the number of days in the given <code>month</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">daysInMonth</span> <span class="token operator">=</span> <span class="token punctuation">(</span>year<span class="token punctuation">,</span> month<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span>year<span class="token punctuation">,</span> month<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getDate</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">daysInMonth</span><span class="token punctuation">(</span><span class="token number">2020</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 31</span> |
|
<span class="token function">daysInMonth</span><span class="token punctuation">(</span><span class="token number">2024</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 29</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: debounce">title: debounce</h2> |
|
<p>Creates a debounced function that delays invoking the provided function until at least <code>ms</code> milliseconds have elapsed since its last invocation.</p> |
|
<ul> |
|
<li>Each time the debounced function is invoked, clear the current pending timeout with <code>clearTimeout()</code>. Use <code>setTimeout()</code> to create a new timeout that delays invoking the function until at least <code>ms</code> milliseconds have elapsed.</li> |
|
<li>Use <code>Function.prototype.apply()</code> to apply the <code>this</code> context to the function and provide the necessary arguments.</li> |
|
<li>Omit the second argument, <code>ms</code>, to set the timeout at a default of <code>0</code> ms.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">debounce</span> <span class="token operator">=</span> <span class="token punctuation">(</span>fn<span class="token punctuation">,</span> ms <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-let">let</span> timeoutId<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> <span class="token keyword keyword-function">function</span><span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
<span class="token function">clearTimeout</span><span class="token punctuation">(</span>timeoutId<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
timeoutId <span class="token operator">=</span> <span class="token function">setTimeout</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> fn<span class="token punctuation">.</span><span class="token function">apply</span><span class="token punctuation">(</span><span class="token keyword keyword-this">this</span><span class="token punctuation">,</span> args<span class="token punctuation">)</span><span class="token punctuation">,</span> ms<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript">window<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span> |
|
<span class="token string">'resize'</span><span class="token punctuation">,</span> |
|
<span class="token function">debounce</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>window<span class="token punctuation">.</span>innerWidth<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>window<span class="token punctuation">.</span>innerHeight<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token number">250</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Will log the window dimensions at most every 250ms</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: debouncePromise">title: debouncePromise</h2> |
|
<p>Creates a debounced function that returns a promise, but delays invoking the provided function until at least <code>ms</code> milliseconds have elapsed since the last time it was invoked.<br> |
|
All promises returned during this time will return the same data.</p> |
|
<ul> |
|
<li>Each time the debounced function is invoked, clear the current pending timeout with <code>clearTimeout()</code> and use <code>setTimeout()</code> to create a new timeout that delays invoking the function until at least <code>ms</code> milliseconds has elapsed.</li> |
|
<li>Use <code>Function.prototype.apply()</code> to apply the <code>this</code> context to the function and provide the necessary arguments.</li> |
|
<li>Create a new <code>Promise</code> and add its <code>resolve</code> and <code>reject</code> callbacks to the <code>pending</code> promises stack.</li> |
|
<li>When <code>setTimeout</code> is called, copy the current stack (as it can change between the provided function call and its resolution), clear it and call the provided function.</li> |
|
<li>When the provided function resolves/rejects, resolve/reject all promises in the stack (copied when the function was called) with the returned data.</li> |
|
<li>Omit the second argument, <code>ms</code>, to set the timeout at a default of <code>0</code> ms.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">debouncePromise</span> <span class="token operator">=</span> <span class="token punctuation">(</span>fn<span class="token punctuation">,</span> ms <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-let">let</span> timeoutId<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> pending <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> <span class="token punctuation">(</span><span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
<span class="token keyword keyword-new">new</span> <span class="token class-name">Promise</span><span class="token punctuation">(</span><span class="token punctuation">(</span>res<span class="token punctuation">,</span> rej<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token function">clearTimeout</span><span class="token punctuation">(</span>timeoutId<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
timeoutId <span class="token operator">=</span> <span class="token function">setTimeout</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> currentPending <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token operator">...</span>pending<span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
pending<span class="token punctuation">.</span>length <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> |
|
Promise<span class="token punctuation">.</span><span class="token function">resolve</span><span class="token punctuation">(</span>fn<span class="token punctuation">.</span><span class="token function">apply</span><span class="token punctuation">(</span><span class="token keyword keyword-this">this</span><span class="token punctuation">,</span> args<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span> |
|
data <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
currentPending<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">{</span> resolve <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token function">resolve</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">,</span> |
|
error <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
currentPending<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">{</span> reject <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token function">reject</span><span class="token punctuation">(</span>error<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">,</span> ms<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
pending<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token punctuation">{</span> resolve<span class="token punctuation">:</span> res<span class="token punctuation">,</span> reject<span class="token punctuation">:</span> rej <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">fn</span> <span class="token operator">=</span> arg <span class="token operator">=></span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Promise</span><span class="token punctuation">(</span>resolve <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token function">setTimeout</span><span class="token punctuation">(</span>resolve<span class="token punctuation">,</span> <span class="token number">1000</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'resolved'</span><span class="token punctuation">,</span> arg<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> debounced <span class="token operator">=</span> <span class="token function">debouncePromise</span><span class="token punctuation">(</span>fn<span class="token punctuation">,</span> <span class="token number">200</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token function">debounced</span><span class="token punctuation">(</span><span class="token string">'foo'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span>console<span class="token punctuation">.</span>log<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token function">debounced</span><span class="token punctuation">(</span><span class="token string">'bar'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span>console<span class="token punctuation">.</span>log<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// Will log ['resolved', 'bar'] both times</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: decapitalize">title: decapitalize</h2> |
|
<p>Decapitalizes the first letter of a string.</p> |
|
<ul> |
|
<li>Use array destructuring and <code>String.prototype.toLowerCase()</code> to decapitalize first letter, <code>...rest</code> to get array of characters after first letter and then <code>Array.prototype.join('')</code> to make it a string again.</li> |
|
<li>Omit the <code>upperRest</code> argument to keep the rest of the string intact, or set it to <code>true</code> to convert to uppercase.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">decapitalize</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">[</span>first<span class="token punctuation">,</span> <span class="token operator">...</span>rest<span class="token punctuation">]</span><span class="token punctuation">,</span> upperRest <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">)</span> <span class="token operator">=></span> |
|
first<span class="token punctuation">.</span><span class="token function">toLowerCase</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> |
|
<span class="token punctuation">(</span>upperRest <span class="token operator">?</span> rest<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toUpperCase</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">:</span> rest<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">decapitalize</span><span class="token punctuation">(</span><span class="token string">'FooBar'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'fooBar'</span> |
|
<span class="token function">decapitalize</span><span class="token punctuation">(</span><span class="token string">'FooBar'</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'fOOBAR'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: deepClone">title: deepClone</h2> |
|
<p>Creates a deep clone of an object.<br> |
|
Clones primitives, arrays and objects, excluding class instances.</p> |
|
<ul> |
|
<li>Use recursion.</li> |
|
<li>Check if the passed object is <code>null</code> and, if so, return <code>null</code>.</li> |
|
<li>Use <code>Object.assign()</code> and an empty object (<code>{}</code>) to create a shallow clone of the original.</li> |
|
<li>Use <code>Object.keys()</code> and <code>Array.prototype.forEach()</code> to determine which key-value pairs need to be deep cloned.</li> |
|
<li>If the object is an <code>Array</code>, set the <code>clone</code>'s <code>length</code> to that of the original and use <code>Array.from(clone)</code> to create a clone.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">deepClone</span> <span class="token operator">=</span> obj <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>obj <span class="token operator">===</span> <span class="token keyword keyword-null">null</span><span class="token punctuation">)</span> <span class="token keyword keyword-return">return</span> <span class="token keyword keyword-null">null</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-let">let</span> clone <span class="token operator">=</span> Object<span class="token punctuation">.</span><span class="token function">assign</span><span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span> obj<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
Object<span class="token punctuation">.</span><span class="token function">keys</span><span class="token punctuation">(</span>clone<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span> |
|
key <span class="token operator">=></span> |
|
<span class="token punctuation">(</span>clone<span class="token punctuation">[</span>key<span class="token punctuation">]</span> <span class="token operator">=</span> |
|
<span class="token keyword keyword-typeof">typeof</span> obj<span class="token punctuation">[</span>key<span class="token punctuation">]</span> <span class="token operator">===</span> <span class="token string">'object'</span> <span class="token operator">?</span> <span class="token function">deepClone</span><span class="token punctuation">(</span>obj<span class="token punctuation">[</span>key<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">:</span> obj<span class="token punctuation">[</span>key<span class="token punctuation">]</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span>Array<span class="token punctuation">.</span><span class="token function">isArray</span><span class="token punctuation">(</span>obj<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
clone<span class="token punctuation">.</span>length <span class="token operator">=</span> obj<span class="token punctuation">.</span>length<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> Array<span class="token punctuation">.</span><span class="token keyword keyword-from">from</span><span class="token punctuation">(</span>clone<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token keyword keyword-return">return</span> clone<span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> a <span class="token operator">=</span> <span class="token punctuation">{</span> foo<span class="token punctuation">:</span> <span class="token string">'bar'</span><span class="token punctuation">,</span> obj<span class="token punctuation">:</span> <span class="token punctuation">{</span> a<span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span> b<span class="token punctuation">:</span> <span class="token number">2</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> b <span class="token operator">=</span> <span class="token function">deepClone</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// a !== b, a.obj !== b.obj</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: deepFlatten">title: deepFlatten</h2> |
|
<p>Deep flattens an array.</p> |
|
<ul> |
|
<li>Use recursion.</li> |
|
<li>Use <code>Array.prototype.concat()</code> with an empty array (<code>[]</code>) and the spread operator (<code>...</code>) to flatten an array.</li> |
|
<li>Recursively flatten each element that is an array.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">deepFlatten</span> <span class="token operator">=</span> arr <span class="token operator">=></span> |
|
<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">concat</span><span class="token punctuation">(</span><span class="token operator">...</span>arr<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>v <span class="token operator">=></span> <span class="token punctuation">(</span>Array<span class="token punctuation">.</span><span class="token function">isArray</span><span class="token punctuation">(</span>v<span class="token punctuation">)</span> <span class="token operator">?</span> <span class="token function">deepFlatten</span><span class="token punctuation">(</span>v<span class="token punctuation">)</span> <span class="token punctuation">:</span> v<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">deepFlatten</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [1, 2, 3, 4, 5]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: deepFreeze">title: deepFreeze</h2> |
|
<p>Deep freezes an object.</p> |
|
<ul> |
|
<li>Use <code>Object.keys()</code> to get all the properties of the passed object, <code>Array.prototype.forEach()</code> to iterate over them.</li> |
|
<li>Call <code>Object.freeze(obj)</code> recursively on all properties, applying <code>deepFreeze()</code> as necessary.</li> |
|
<li>Finally, use <code>Object.freeze()</code> to freeze the given object.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">deepFreeze</span> <span class="token operator">=</span> obj <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
Object<span class="token punctuation">.</span><span class="token function">keys</span><span class="token punctuation">(</span>obj<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span>prop <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-if">if</span> <span class="token punctuation">(</span><span class="token keyword keyword-typeof">typeof</span> obj<span class="token punctuation">[</span>prop<span class="token punctuation">]</span> <span class="token operator">===</span> <span class="token string">'object'</span><span class="token punctuation">)</span> <span class="token function">deepFreeze</span><span class="token punctuation">(</span>obj<span class="token punctuation">[</span>prop<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> Object<span class="token punctuation">.</span><span class="token function">freeze</span><span class="token punctuation">(</span>obj<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token string">'use strict'</span><span class="token punctuation">;</span> |
|
|
|
<span class="token keyword keyword-const">const</span> val <span class="token operator">=</span> <span class="token function">deepFreeze</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
|
|
val<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">;</span> <span class="token comment">// not allowed</span> |
|
val<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">4</span><span class="token punctuation">;</span> <span class="token comment">// not allowed as well</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: deepGet">title: deepGet</h2> |
|
<p>Gets the target value in a nested JSON object, based on the <code>keys</code> array.</p> |
|
<ul> |
|
<li>Compare the keys you want in the nested JSON object as an <code>Array</code>.</li> |
|
<li>Use <code>Array.prototype.reduce()</code> to get the values in the nested JSON object one by one.</li> |
|
<li>If the key exists in the object, return the target value, otherwise return <code>null</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">deepGet</span> <span class="token operator">=</span> <span class="token punctuation">(</span>obj<span class="token punctuation">,</span> keys<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
keys<span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span> |
|
<span class="token punctuation">(</span>xs<span class="token punctuation">,</span> x<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span>xs <span class="token operator">&&</span> xs<span class="token punctuation">[</span>x<span class="token punctuation">]</span> <span class="token operator">!==</span> <span class="token keyword keyword-null">null</span> <span class="token operator">&&</span> xs<span class="token punctuation">[</span>x<span class="token punctuation">]</span> <span class="token operator">!==</span> undefined <span class="token operator">?</span> xs<span class="token punctuation">[</span>x<span class="token punctuation">]</span> <span class="token punctuation">:</span> <span class="token keyword keyword-null">null</span><span class="token punctuation">)</span><span class="token punctuation">,</span> |
|
obj |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-let">let</span> index <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> data <span class="token operator">=</span> <span class="token punctuation">{</span> |
|
foo<span class="token punctuation">:</span> <span class="token punctuation">{</span> |
|
foz<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">,</span> |
|
bar<span class="token punctuation">:</span> <span class="token punctuation">{</span> |
|
baz<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token string">'a'</span><span class="token punctuation">,</span> <span class="token string">'b'</span><span class="token punctuation">,</span> <span class="token string">'c'</span><span class="token punctuation">]</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
<span class="token function">deepGet</span><span class="token punctuation">(</span>data<span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'foo'</span><span class="token punctuation">,</span> <span class="token string">'foz'</span><span class="token punctuation">,</span> index<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// get 3</span> |
|
<span class="token function">deepGet</span><span class="token punctuation">(</span>data<span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'foo'</span><span class="token punctuation">,</span> <span class="token string">'bar'</span><span class="token punctuation">,</span> <span class="token string">'baz'</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">,</span> <span class="token string">'foz'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// null</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: deepMapKeys">title: deepMapKeys</h2> |
|
<p>Deep maps an object's keys.</p> |
|
<ul> |
|
<li>Creates an object with the same values as the provided object and keys generated by running the provided function for each key.</li> |
|
<li>Use <code>Object.keys(obj)</code> to iterate over the object's keys.</li> |
|
<li>Use <code>Array.prototype.reduce()</code> to create a new object with the same values and mapped keys using <code>fn</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">deepMapKeys</span> <span class="token operator">=</span> <span class="token punctuation">(</span>obj<span class="token punctuation">,</span> fn<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
Array<span class="token punctuation">.</span><span class="token function">isArray</span><span class="token punctuation">(</span>obj<span class="token punctuation">)</span> |
|
<span class="token operator">?</span> obj<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>val <span class="token operator">=></span> <span class="token function">deepMapKeys</span><span class="token punctuation">(</span>val<span class="token punctuation">,</span> fn<span class="token punctuation">)</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">:</span> <span class="token keyword keyword-typeof">typeof</span> obj <span class="token operator">===</span> <span class="token string">'object'</span> |
|
<span class="token operator">?</span> Object<span class="token punctuation">.</span><span class="token function">keys</span><span class="token punctuation">(</span>obj<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span><span class="token punctuation">(</span>acc<span class="token punctuation">,</span> current<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> key <span class="token operator">=</span> <span class="token function">fn</span><span class="token punctuation">(</span>current<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> val <span class="token operator">=</span> obj<span class="token punctuation">[</span>current<span class="token punctuation">]</span><span class="token punctuation">;</span> |
|
acc<span class="token punctuation">[</span>key<span class="token punctuation">]</span> <span class="token operator">=</span> |
|
val <span class="token operator">!==</span> <span class="token keyword keyword-null">null</span> <span class="token operator">&&</span> <span class="token keyword keyword-typeof">typeof</span> val <span class="token operator">===</span> <span class="token string">'object'</span> <span class="token operator">?</span> <span class="token function">deepMapKeys</span><span class="token punctuation">(</span>val<span class="token punctuation">,</span> fn<span class="token punctuation">)</span> <span class="token punctuation">:</span> val<span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> acc<span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">:</span> obj<span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> obj <span class="token operator">=</span> <span class="token punctuation">{</span> |
|
foo<span class="token punctuation">:</span> <span class="token string">'1'</span><span class="token punctuation">,</span> |
|
nested<span class="token punctuation">:</span> <span class="token punctuation">{</span> |
|
child<span class="token punctuation">:</span> <span class="token punctuation">{</span> |
|
withArray<span class="token punctuation">:</span> <span class="token punctuation">[</span> |
|
<span class="token punctuation">{</span> |
|
grandChild<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token string">'hello'</span><span class="token punctuation">]</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token punctuation">]</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token punctuation">}</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-const">const</span> upperKeysObj <span class="token operator">=</span> <span class="token function">deepMapKeys</span><span class="token punctuation">(</span>obj<span class="token punctuation">,</span> key <span class="token operator">=></span> key<span class="token punctuation">.</span><span class="token function">toUpperCase</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">/* |
|
{ |
|
"FOO":"1", |
|
"NESTED":{ |
|
"CHILD":{ |
|
"WITHARRAY":[ |
|
{ |
|
"GRANDCHILD":[ 'hello' ] |
|
} |
|
] |
|
} |
|
} |
|
} |
|
*/</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: deepMerge">title: deepMerge</h2> |
|
<p>Deeply merges two objects, using a function to handle keys present in both.</p> |
|
<ul> |
|
<li>Use <code>Object.keys()</code> to get the keys of both objects, create a <code>Set</code> from them and use the spread operator (<code>...</code>) to create an array of all the unique keys.</li> |
|
<li>Use <code>Array.prototype.reduce()</code> to add each unique key to the object, using <code>fn</code> to combine the values of the two given objects.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">deepMerge</span> <span class="token operator">=</span> <span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">,</span> fn<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
<span class="token punctuation">[</span><span class="token operator">...</span><span class="token keyword keyword-new">new</span> <span class="token class-name">Set</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token operator">...</span>Object<span class="token punctuation">.</span><span class="token function">keys</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token operator">...</span>Object<span class="token punctuation">.</span><span class="token function">keys</span><span class="token punctuation">(</span>b<span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span> |
|
<span class="token punctuation">(</span>acc<span class="token punctuation">,</span> key<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token operator">...</span>acc<span class="token punctuation">,</span> <span class="token punctuation">[</span>key<span class="token punctuation">]</span><span class="token punctuation">:</span> <span class="token function">fn</span><span class="token punctuation">(</span>key<span class="token punctuation">,</span> a<span class="token punctuation">[</span>key<span class="token punctuation">]</span><span class="token punctuation">,</span> b<span class="token punctuation">[</span>key<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">{</span><span class="token punctuation">}</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">deepMerge</span><span class="token punctuation">(</span> |
|
<span class="token punctuation">{</span> a<span class="token punctuation">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span> b<span class="token punctuation">:</span> <span class="token punctuation">{</span> c<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">{</span> a<span class="token punctuation">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span> b<span class="token punctuation">:</span> <span class="token punctuation">{</span> d<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">(</span>key<span class="token punctuation">,</span> a<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span>key <span class="token operator">===</span> <span class="token string">'a'</span> <span class="token operator">?</span> a <span class="token operator">&&</span> b <span class="token punctuation">:</span> Object<span class="token punctuation">.</span><span class="token function">assign</span><span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span> a<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// { a: false, b: { c: [ 1, 2, 3 ], d: [ 1, 2, 3 ] } }</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: defaults">title: defaults</h2> |
|
<p>Assigns default values for all properties in an object that are <code>undefined</code>.</p> |
|
<ul> |
|
<li>Use <code>Object.assign()</code> to create a new empty object and copy the original one to maintain key order.</li> |
|
<li>Use <code>Array.prototype.reverse()</code> and the spread operator (<code>...</code>) to combine the default values from left to right.</li> |
|
<li>Finally, use <code>obj</code> again to overwrite properties that originally had a value.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">defaults</span> <span class="token operator">=</span> <span class="token punctuation">(</span>obj<span class="token punctuation">,</span> <span class="token operator">...</span>defs<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
Object<span class="token punctuation">.</span><span class="token function">assign</span><span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span> obj<span class="token punctuation">,</span> <span class="token operator">...</span>defs<span class="token punctuation">.</span><span class="token function">reverse</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> obj<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">defaults</span><span class="token punctuation">(</span><span class="token punctuation">{</span> a<span class="token punctuation">:</span> <span class="token number">1</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> b<span class="token punctuation">:</span> <span class="token number">2</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> b<span class="token punctuation">:</span> <span class="token number">6</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> a<span class="token punctuation">:</span> <span class="token number">3</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// { a: 1, b: 2 }</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: defer">title: defer</h2> |
|
<p>Defers invoking a function until the current call stack has cleared.</p> |
|
<ul> |
|
<li>Use <code>setTimeout()</code> with a timeout of <code>1</code> ms to add a new event to the event queue and allow the rendering engine to complete its work.</li> |
|
<li>Use the spread (<code>...</code>) operator to supply the function with an arbitrary number of arguments.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">defer</span> <span class="token operator">=</span> <span class="token punctuation">(</span>fn<span class="token punctuation">,</span> <span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token function">setTimeout</span><span class="token punctuation">(</span>fn<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token operator">...</span>args<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token comment">// Example A:</span> |
|
<span class="token function">defer</span><span class="token punctuation">(</span>console<span class="token punctuation">.</span>log<span class="token punctuation">,</span> <span class="token string">'a'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'b'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// logs 'b' then 'a'</span> |
|
|
|
<span class="token comment">// Example B:</span> |
|
document<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span><span class="token string">'#someElement'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>innerHTML <span class="token operator">=</span> <span class="token string">'Hello'</span><span class="token punctuation">;</span> |
|
<span class="token function">longRunningFunction</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// Browser will not update the HTML until this has finished</span> |
|
<span class="token function">defer</span><span class="token punctuation">(</span>longRunningFunction<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token comment">// Browser will update the HTML then run the function</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: degreesToRads">title: degreesToRads</h2> |
|
<p>Converts an angle from degrees to radians.</p> |
|
<ul> |
|
<li>Use <code>Math.PI</code> and the degree to radian formula to convert the angle from degrees to radians.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">degreesToRads</span> <span class="token operator">=</span> deg <span class="token operator">=></span> <span class="token punctuation">(</span>deg <span class="token operator">*</span> Math<span class="token punctuation">.</span><span class="token constant">PI</span><span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token number">180.0</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">degreesToRads</span><span class="token punctuation">(</span><span class="token number">90.0</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// ~1.5708</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: delay">title: delay</h2> |
|
<p>Invokes the provided function after <code>ms</code> milliseconds.</p> |
|
<ul> |
|
<li>Use <code>setTimeout()</code> to delay execution of <code>fn</code>.</li> |
|
<li>Use the spread (<code>...</code>) operator to supply the function with an arbitrary number of arguments.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">delay</span> <span class="token operator">=</span> <span class="token punctuation">(</span>fn<span class="token punctuation">,</span> ms<span class="token punctuation">,</span> <span class="token operator">...</span>args<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token function">setTimeout</span><span class="token punctuation">(</span>fn<span class="token punctuation">,</span> ms<span class="token punctuation">,</span> <span class="token operator">...</span>args<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">delay</span><span class="token punctuation">(</span> |
|
<span class="token keyword keyword-function">function</span><span class="token punctuation">(</span>text<span class="token punctuation">)</span> <span class="token punctuation">{</span> |
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>text<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">,</span> |
|
<span class="token number">1000</span><span class="token punctuation">,</span> |
|
<span class="token string">'later'</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Logs 'later' after one second.</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: detectDeviceType">title: detectDeviceType</h2> |
|
<p>Detects whether the page is being viewed on a mobile device or a desktop.</p> |
|
<ul> |
|
<li>Use a regular expression to test the <code>navigator.userAgent</code> property to figure out if the device is a mobile device or a desktop.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">detectDeviceType</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> |
|
<span class="token regex">/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i</span><span class="token punctuation">.</span><span class="token function">test</span><span class="token punctuation">(</span> |
|
navigator<span class="token punctuation">.</span>userAgent |
|
<span class="token punctuation">)</span> |
|
<span class="token operator">?</span> <span class="token string">'Mobile'</span> |
|
<span class="token punctuation">:</span> <span class="token string">'Desktop'</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">detectDeviceType</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'Mobile' or 'Desktop'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: detectLanguage">title: detectLanguage</h2> |
|
<p>Detects the preferred language of the current user.</p> |
|
<ul> |
|
<li>Use <code>NavigationLanguage.language</code> or the first <code>NavigationLanguage.languages</code> if available, otherwise return <code>defaultLang</code>.</li> |
|
<li>Omit the second argument, <code>defaultLang</code>, to use <code>'en-US'</code> as the default language code.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> detectLanguage <span class="token operator">=</span> <span class="token punctuation">(</span>defaultLang <span class="token operator">=</span> <span class="token string">'en-US'</span><span class="token punctuation">)</span> <span class="token operator">=></span> |
|
navigator<span class="token punctuation">.</span>language <span class="token operator">||</span> |
|
<span class="token punctuation">(</span>Array<span class="token punctuation">.</span><span class="token function">isArray</span><span class="token punctuation">(</span>navigator<span class="token punctuation">.</span>languages<span class="token punctuation">)</span> <span class="token operator">&&</span> navigator<span class="token punctuation">.</span>languages<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">||</span> |
|
defaultLang<span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">detectLanguage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'nl-NL'</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: difference">title: difference</h2> |
|
<p>Calculates the difference between two arrays, without filtering duplicate values.</p> |
|
<ul> |
|
<li>Create a <code>Set</code> from <code>b</code> to get the unique values in <code>b</code>.</li> |
|
<li>Use <code>Array.prototype.filter()</code> on <code>a</code> to only keep values not contained in <code>b</code>, using <code>Set.prototype.has()</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">difference</span> <span class="token operator">=</span> <span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> s <span class="token operator">=</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Set</span><span class="token punctuation">(</span>b<span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> a<span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span>x <span class="token operator">=></span> <span class="token operator">!</span>s<span class="token punctuation">.</span><span class="token function">has</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">difference</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [3, 3]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: differenceBy">title: differenceBy</h2> |
|
<p>Returns the difference between two arrays, after applying the provided function to each array element of both.</p> |
|
<ul> |
|
<li>Create a <code>Set</code> by applying <code>fn</code> to each element in <code>b</code>.</li> |
|
<li>Use <code>Array.prototype.map()</code> to apply <code>fn</code> to each element in <code>a</code>.</li> |
|
<li>Use <code>Array.prototype.filter()</code> in combination with <code>fn</code> on <code>a</code> to only keep values not contained in <code>b</code>, using <code>Set.prototype.has()</code>.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">differenceBy</span> <span class="token operator">=</span> <span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">,</span> fn<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> |
|
<span class="token keyword keyword-const">const</span> s <span class="token operator">=</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">Set</span><span class="token punctuation">(</span>b<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>fn<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token keyword keyword-return">return</span> a<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>fn<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span>el <span class="token operator">=></span> <span class="token operator">!</span>s<span class="token punctuation">.</span><span class="token function">has</span><span class="token punctuation">(</span>el<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
<span class="token punctuation">}</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">differenceBy</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">2.1</span><span class="token punctuation">,</span> <span class="token number">1.2</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">2.3</span><span class="token punctuation">,</span> <span class="token number">3.4</span><span class="token punctuation">]</span><span class="token punctuation">,</span> Math<span class="token punctuation">.</span>floor<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [1]</span> |
|
<span class="token function">differenceBy</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">{</span> x<span class="token punctuation">:</span> <span class="token number">2</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> x<span class="token punctuation">:</span> <span class="token number">1</span> <span class="token punctuation">}</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token punctuation">{</span> x<span class="token punctuation">:</span> <span class="token number">1</span> <span class="token punctuation">}</span><span class="token punctuation">]</span><span class="token punctuation">,</span> v <span class="token operator">=></span> v<span class="token punctuation">.</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [2]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: differenceWith">title: differenceWith</h2> |
|
<p>Filters out all values from an array for which the comparator function does not return <code>true</code>.</p> |
|
<ul> |
|
<li>Use <code>Array.prototype.filter()</code> and <code>Array.prototype.findIndex()</code> to find the appropriate values.</li> |
|
<li>Omit the last argument, <code>comp</code>, to use a default strict equality comparator.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> differenceWith <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> val<span class="token punctuation">,</span> <span class="token function-variable function">comp</span> <span class="token operator">=</span> <span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> a <span class="token operator">===</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> |
|
arr<span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span>a <span class="token operator">=></span> val<span class="token punctuation">.</span><span class="token function">findIndex</span><span class="token punctuation">(</span>b <span class="token operator">=></span> <span class="token function">comp</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">===</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
|
</pre><pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token function">differenceWith</span><span class="token punctuation">(</span> |
|
<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1.2</span><span class="token punctuation">,</span> <span class="token number">1.5</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">[</span><span class="token number">1.9</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> |
|
<span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token operator">=></span> Math<span class="token punctuation">.</span><span class="token function">round</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span> <span class="token operator">===</span> Math<span class="token punctuation">.</span><span class="token function">round</span><span class="token punctuation">(</span>b<span class="token punctuation">)</span> |
|
<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [1, 1.2]</span> |
|
<span class="token function">differenceWith</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1.2</span><span class="token punctuation">,</span> <span class="token number">1.3</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1.3</span><span class="token punctuation">,</span> <span class="token number">1.5</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [1.2]</span> |
|
</pre><hr> |
|
<h2 ebook-toc-level-2 heading="title: dig">title: dig</h2> |
|
<p>Gets the target value in a nested JSON object, based on the given key.</p> |
|
<ul> |
|
<li>Use the <code>in</code> operator to check if <code>target</code> exists in <code>obj</code>.</li> |
|
<li>If found, return the value of <code>obj[target]</code>.</li> |
|
<li>Otherwise use <code>Object.values(obj)</code> and <code>Array.prototype.reduce()</code> to recursively call <code>dig</code> on each nested object until the first matching key/value pair is found.</li> |
|
</ul> |
|
<pre data-role="codeBlock" data-info="js" class="language-javascript"><span class="token keyword keyword-const">const</span> <span class="token function-variable function">dig</span> <span class="token operator">=</span> <span class="token punctuation">(</span>obj<span class="token punctuation">,</span> target<span class |