Travis build: 659
This commit is contained in:
51
README.md
51
README.md
@ -550,11 +550,11 @@ const call = (key, ...args) => context => context[key](...args);
|
||||
```js
|
||||
Promise.resolve([1, 2, 3])
|
||||
.then(call('map', x => 2 * x))
|
||||
.then(console.log); //[ 2, 4, 6 ]
|
||||
.then(console.log); // [ 2, 4, 6 ]
|
||||
const map = call.bind(null, 'map');
|
||||
Promise.resolve([1, 2, 3])
|
||||
.then(map(x => 2 * x))
|
||||
.then(console.log); //[ 2, 4, 6 ]
|
||||
.then(console.log); // [ 2, 4, 6 ]
|
||||
```
|
||||
|
||||
</details>
|
||||
@ -681,7 +681,7 @@ const sum = pipeAsyncFunctions(
|
||||
x => x + 3,
|
||||
async x => (await x) + 4
|
||||
);
|
||||
(async () => {
|
||||
(async() => {
|
||||
console.log(await sum(5)); // 15 (after one second)
|
||||
})();
|
||||
```
|
||||
@ -2306,9 +2306,9 @@ The `func` is invoked with three arguments (`value, index, array`).
|
||||
const remove = (arr, func) =>
|
||||
Array.isArray(arr)
|
||||
? arr.filter(func).reduce((acc, val) => {
|
||||
arr.splice(arr.indexOf(val), 1);
|
||||
return acc.concat(val);
|
||||
}, [])
|
||||
arr.splice(arr.indexOf(val), 1);
|
||||
return acc.concat(val);
|
||||
}, [])
|
||||
: [];
|
||||
```
|
||||
|
||||
@ -3033,8 +3033,8 @@ const unzip = arr =>
|
||||
<summary>Examples</summary>
|
||||
|
||||
```js
|
||||
unzip([['a', 1, true], ['b', 2, false]]); //[['a', 'b'], [1, 2], [true, false]]
|
||||
unzip([['a', 1, true], ['b', 2]]); //[['a', 'b'], [1, 2], [true]]
|
||||
unzip([['a', 1, true], ['b', 2, false]]); // [['a', 'b'], [1, 2], [true, false]]
|
||||
unzip([['a', 1, true], ['b', 2]]); // [['a', 'b'], [1, 2], [true]]
|
||||
```
|
||||
|
||||
</details>
|
||||
@ -4036,11 +4036,9 @@ const runAsync = fn => {
|
||||
const longRunningFunction = () => {
|
||||
let result = 0;
|
||||
for (let i = 0; i < 1000; i++) {
|
||||
for (let j = 0; j < 700; j++) {
|
||||
for (let k = 0; k < 300; k++) {
|
||||
result = result + i + j + k;
|
||||
}
|
||||
}
|
||||
for (let j = 0; j < 700; j++)
|
||||
for (let k = 0; k < 300; k++) result = result + i + j + k;
|
||||
|
||||
}
|
||||
return result;
|
||||
};
|
||||
@ -4794,7 +4792,7 @@ defer(console.log, 'a'), console.log('b'); // logs 'b' then 'a'
|
||||
|
||||
// Example B:
|
||||
document.querySelector('#someElement').innerHTML = 'Hello';
|
||||
longRunningFunction(); //Browser will not update the HTML until this has finished
|
||||
longRunningFunction(); // Browser will not update the HTML until this has finished
|
||||
defer(longRunningFunction); // Browser will update the HTML then run the function
|
||||
```
|
||||
|
||||
@ -5443,9 +5441,8 @@ const elo = ([...ratings], kFactor = 32, selfRating) => {
|
||||
const expectedScore = (self, opponent) => 1 / (1 + 10 ** ((opponent - self) / 400));
|
||||
const newRating = (rating, i) =>
|
||||
(selfRating || rating) + kFactor * (i - expectedScore(i ? a : b, i ? b : a));
|
||||
if (ratings.length === 2) {
|
||||
return [newRating(a, 1), newRating(b, 0)];
|
||||
}
|
||||
if (ratings.length === 2) return [newRating(a, 1), newRating(b, 0)];
|
||||
|
||||
for (let i = 0, len = ratings.length; i < len; i++) {
|
||||
let j = i;
|
||||
while (j < len - 1) {
|
||||
@ -5490,8 +5487,8 @@ Throws an exception if `n` is a negative number.
|
||||
const factorial = n =>
|
||||
n < 0
|
||||
? (() => {
|
||||
throw new TypeError('Negative numbers are not allowed!');
|
||||
})()
|
||||
throw new TypeError('Negative numbers are not allowed!');
|
||||
})()
|
||||
: n <= 1
|
||||
? 1
|
||||
: n * factorial(n - 1);
|
||||
@ -6142,8 +6139,8 @@ const sumPower = (end, power = 2, start = 1) =>
|
||||
|
||||
```js
|
||||
sumPower(10); // 385
|
||||
sumPower(10, 3); //3025
|
||||
sumPower(10, 3, 5); //2925
|
||||
sumPower(10, 3); // 3025
|
||||
sumPower(10, 3, 5); // 2925
|
||||
```
|
||||
|
||||
</details>
|
||||
@ -6638,7 +6635,7 @@ Calls `Object.freeze(obj)` recursively on all unfrozen properties of passed obje
|
||||
const deepFreeze = obj =>
|
||||
Object.keys(obj).forEach(
|
||||
prop =>
|
||||
!obj[prop] instanceof Object || Object.isFrozen(obj[prop]) ? null : deepFreeze(obj[prop])
|
||||
!(obj[prop] instanceof Object) || Object.isFrozen(obj[prop]) ? null : deepFreeze(obj[prop])
|
||||
) || Object.freeze(obj);
|
||||
```
|
||||
|
||||
@ -6691,9 +6688,9 @@ const dig = (obj, target) =>
|
||||
target in obj
|
||||
? obj[target]
|
||||
: Object.values(obj).reduce((acc, val) => {
|
||||
if (acc !== undefined) return acc;
|
||||
if (typeof val === 'object') return dig(val, target);
|
||||
}, undefined);
|
||||
if (acc !== undefined) return acc;
|
||||
if (typeof val === 'object') return dig(val, target);
|
||||
}, undefined);
|
||||
```
|
||||
|
||||
<details>
|
||||
@ -9038,7 +9035,7 @@ const httpGet = (url, callback, err = console.error) => {
|
||||
httpGet(
|
||||
'https://jsonplaceholder.typicode.com/posts/1',
|
||||
console.log
|
||||
); /*
|
||||
); /*
|
||||
Logs: {
|
||||
"userId": 1,
|
||||
"id": 1,
|
||||
@ -9099,7 +9096,7 @@ Logs: {
|
||||
*/
|
||||
httpPost(
|
||||
'https://jsonplaceholder.typicode.com/posts',
|
||||
null, //does not send a body
|
||||
null, // does not send a body
|
||||
console.log
|
||||
); /*
|
||||
Logs: {
|
||||
|
||||
@ -97,11 +97,11 @@
|
||||
</pre></div><div class="card code-card"><div class="corner intermediate"></div><div class="section card-content"><h4 id="call">call</h4><p>Given a key and a set of arguments, call them when given a context. Primarily useful in composition.</p><p>Use a closure to call a stored key with stored arguments.</p></div><div class="copy-button-container"><button class="copy-button" aria-label="Copy to clipboard"></button></div><pre class="section card-code language-js"><span class="token keyword">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 operator">...</span>args<span class="token punctuation">);</span>
|
||||
</pre><label class="collapse">examples</label><pre class="section card-examples language-js">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 number">2</span><span class="token punctuation">,</span> <span class="token number">3</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 function">then</span><span class="token punctuation">(</span>console<span class="token punctuation">.</span>log<span class="token punctuation">);</span> <span class="token comment">//[ 2, 4, 6 ]</span>
|
||||
.</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 comment">// [ 2, 4, 6 ]</span>
|
||||
<span class="token keyword">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">null</span><span class="token punctuation">,</span> <span class="token string">'map'</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 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 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 function">then</span><span class="token punctuation">(</span>console<span class="token punctuation">.</span>log<span class="token punctuation">);</span> <span class="token comment">//[ 2, 4, 6 ]</span>
|
||||
.</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 comment">// [ 2, 4, 6 ]</span>
|
||||
</pre></div><div class="card code-card"><div class="corner intermediate"></div><div class="section card-content"><h4 id="collectinto">collectInto</h4><p>Changes a function that accepts an array into a variadic function.</p><p>Given a function, return a closure that collects all inputs into an array-accepting function.</p></div><div class="copy-button-container"><button class="copy-button" aria-label="Copy to clipboard"></button></div><pre class="section card-code language-js"><span class="token keyword">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>
|
||||
</pre><label class="collapse">examples</label><pre class="section card-examples language-js"><span class="token keyword">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 keyword">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>
|
||||
@ -131,7 +131,7 @@ Object<span class="token punctuation">.</span><span class="token function">assig
|
||||
x <span class="token operator">=></span> x <span class="token operator">+</span> <span class="token number">3</span><span class="token punctuation">,</span>
|
||||
<span class="token keyword">async</span> x <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token keyword">await</span> x<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">4</span>
|
||||
<span class="token punctuation">);
|
||||
(</span><span class="token keyword">async</span> <span class="token punctuation">()</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
|
||||
(</span><span class="token keyword">async</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 keyword">await</span> <span class="token function">sum</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">));</span> <span class="token comment">// 15 (after one second)</span>
|
||||
<span class="token punctuation">})();</span>
|
||||
</pre></div><div class="card code-card"><div class="corner intermediate"></div><div class="section card-content"><h4 id="pipefunctions">pipeFunctions</h4><p>Performs left-to-right function composition.</p><p>Use <code>Array.prototype.reduce()</code> with the spread operator (<code>...</code>) to perform left-to-right function composition. The first (leftmost) function can accept one or more arguments; the remaining functions must be unary.</p></div><div class="copy-button-container"><button class="copy-button" aria-label="Copy to clipboard"></button></div><pre class="section card-code language-js"><span class="token keyword">const</span> <span class="token function-variable function">pipeFunctions</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>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>
|
||||
|
||||
@ -336,11 +336,9 @@ recorder<span class="token punctuation">.</span><span class="token function">sta
|
||||
</pre><label class="collapse">examples</label><pre class="section card-examples language-js"><span class="token keyword">const</span> <span class="token function-variable function">longRunningFunction</span> <span class="token operator">=</span> <span class="token punctuation">()</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
|
||||
<span class="token keyword">let</span> result <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||||
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">let</span> i <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">1000</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">) {</span>
|
||||
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">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> <span class="token number">700</span><span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">) {</span>
|
||||
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">let</span> k <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> k <span class="token operator"><</span> <span class="token number">300</span><span class="token punctuation">;</span> k<span class="token operator">++</span><span class="token punctuation">) {</span>
|
||||
result <span class="token operator">=</span> result <span class="token operator">+</span> i <span class="token operator">+</span> j <span class="token operator">+</span> k<span class="token punctuation">;
|
||||
}
|
||||
}
|
||||
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">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> <span class="token number">700</span><span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span>
|
||||
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">let</span> k <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> k <span class="token operator"><</span> <span class="token number">300</span><span class="token punctuation">;</span> k<span class="token operator">++</span><span class="token punctuation">)</span> result <span class="token operator">=</span> result <span class="token operator">+</span> i <span class="token operator">+</span> j <span class="token operator">+</span> k<span class="token punctuation">;
|
||||
|
||||
}</span>
|
||||
<span class="token keyword">return</span> result<span class="token punctuation">;
|
||||
};</span>
|
||||
|
||||
@ -176,7 +176,7 @@ console<span class="token punctuation">.</span><span class="token function">log<
|
||||
|
||||
<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>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 comment">//Browser will not update the HTML until this has finished</span>
|
||||
<span class="token function">longRunningFunction</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 comment">// Browser will update the HTML then run the function</span>
|
||||
</pre></div><div class="card code-card"><div class="corner intermediate"></div><div class="section card-content"><h4 id="delay">delay</h4><p>Invokes the provided function after <code>wait</code> milliseconds.</p><p>Use <code>setTimeout()</code> to delay execution of <code>fn</code>. Use the spread (<code>...</code>) operator to supply the function with an arbitrary number of arguments.</p></div><div class="copy-button-container"><button class="copy-button" aria-label="Copy to clipboard"></button></div><pre class="section card-code language-js"><span class="token keyword">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> wait<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> wait<span class="token punctuation">,</span> <span class="token operator">...</span>args<span class="token punctuation">);</span>
|
||||
</pre><label class="collapse">examples</label><pre class="section card-examples language-js"><span class="token function">delay</span><span class="token punctuation">(</span>
|
||||
|
||||
@ -407,9 +407,9 @@
|
||||
</pre></div><div class="card code-card"><div class="corner intermediate"></div><div class="section card-content"><h4 id="remove">remove</h4><p>Removes elements from an array for which the given function returns <code>false</code>.</p><p>Use <code>Array.prototype.filter()</code> to find array elements that return truthy values and <code>Array.prototype.reduce()</code> to remove elements using <code>Array.prototype.splice()</code>. The <code>func</code> is invoked with three arguments (<code>value, index, array</code>).</p></div><div class="copy-button-container"><button class="copy-button" aria-label="Copy to clipboard"></button></div><pre class="section card-code language-js"><span class="token keyword">const</span> <span class="token function-variable function">remove</span> <span class="token operator">=</span> <span class="token punctuation">(</span>arr<span class="token punctuation">,</span> func<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>arr<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>func<span class="token punctuation">).</span><span class="token function">reduce</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>
|
||||
arr<span class="token punctuation">.</span><span class="token function">splice</span><span class="token punctuation">(</span>arr<span class="token punctuation">.</span><span class="token function">indexOf</span><span class="token punctuation">(</span>val<span class="token punctuation">),</span> <span class="token number">1</span><span class="token punctuation">);</span>
|
||||
<span class="token keyword">return</span> acc<span class="token punctuation">.</span><span class="token function">concat</span><span class="token punctuation">(</span>val<span class="token punctuation">);
|
||||
}, [])
|
||||
arr<span class="token punctuation">.</span><span class="token function">splice</span><span class="token punctuation">(</span>arr<span class="token punctuation">.</span><span class="token function">indexOf</span><span class="token punctuation">(</span>val<span class="token punctuation">),</span> <span class="token number">1</span><span class="token punctuation">);</span>
|
||||
<span class="token keyword">return</span> acc<span class="token punctuation">.</span><span class="token function">concat</span><span class="token punctuation">(</span>val<span class="token punctuation">);
|
||||
}, [])
|
||||
: [];</span>
|
||||
</pre><label class="collapse">examples</label><pre class="section card-examples language-js"><span class="token function">remove</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> n <span class="token operator">=></span> n <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 comment">// [2, 4]</span>
|
||||
</pre></div><div class="card code-card"><div class="corner beginner"></div><div class="section card-content"><h4 id="sample">sample</h4><p>Returns a random element from an array.</p><p>Use <code>Math.random()</code> to generate a random number, multiply it by <code>length</code> and round it off to the nearest whole number using <code>Math.floor()</code>. This method also works with strings.</p></div><div class="copy-button-container"><button class="copy-button" aria-label="Copy to clipboard"></button></div><pre class="section card-code language-js"><span class="token keyword">const</span> <span class="token function-variable function">sample</span> <span class="token operator">=</span> arr <span class="token operator">=></span> arr<span class="token punctuation">[</span>Math<span class="token punctuation">.</span><span class="token function">floor</span><span class="token punctuation">(</span>Math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">()</span> <span class="token operator">*</span> arr<span class="token punctuation">.</span>length<span class="token punctuation">)];</span>
|
||||
@ -594,8 +594,8 @@ managers<span class="token punctuation">;</span> <span class="token comment">//
|
||||
length<span class="token punctuation">:</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 function">map</span><span class="token punctuation">(</span>x <span class="token operator">=></span> x<span class="token punctuation">.</span>length<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>
|
||||
</pre><label class="collapse">examples</label><pre class="section card-examples language-js"><span class="token function">unzip</span><span class="token punctuation">([[</span><span class="token string">'a'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">], [</span><span class="token string">'b'</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">]]);</span> <span class="token comment">//[['a', 'b'], [1, 2], [true, false]]</span>
|
||||
<span class="token function">unzip</span><span class="token punctuation">([[</span><span class="token string">'a'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">], [</span><span class="token string">'b'</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">]]);</span> <span class="token comment">//[['a', 'b'], [1, 2], [true]]</span>
|
||||
</pre><label class="collapse">examples</label><pre class="section card-examples language-js"><span class="token function">unzip</span><span class="token punctuation">([[</span><span class="token string">'a'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">], [</span><span class="token string">'b'</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">]]);</span> <span class="token comment">// [['a', 'b'], [1, 2], [true, false]]</span>
|
||||
<span class="token function">unzip</span><span class="token punctuation">([[</span><span class="token string">'a'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">], [</span><span class="token string">'b'</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">]]);</span> <span class="token comment">// [['a', 'b'], [1, 2], [true]]</span>
|
||||
</pre></div><div class="card code-card"><div class="corner advanced"></div><div class="section card-content"><h4 id="unzipwith">unzipWith</h4><p>Creates an array of elements, ungrouping the elements in an array produced by <a href="#zip">zip</a> and applying the provided function.</p><p>Use <code>Math.max.apply()</code> to get the longest subarray in the array, <code>Array.prototype.map()</code> to make each element an array. Use <code>Array.prototype.reduce()</code> and <code>Array.prototype.forEach()</code> to map grouped values to individual arrays. Use <code>Array.prototype.map()</code> and the spread operator (<code>...</code>) to apply <code>fn</code> to each individual group of elements.</p></div><div class="copy-button-container"><button class="copy-button" aria-label="Copy to clipboard"></button></div><pre class="section card-code language-js"><span class="token keyword">const</span> <span class="token function-variable function">unzipWith</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">(
|
||||
|
||||
@ -126,9 +126,8 @@
|
||||
<span class="token keyword">const</span> <span class="token function-variable function">expectedScore</span> <span class="token operator">=</span> <span class="token punctuation">(</span>self<span class="token punctuation">,</span> opponent<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token number">1</span> <span class="token operator">/</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">+</span> <span class="token number">10</span> <span class="token operator">**</span> <span class="token punctuation">((</span>opponent <span class="token operator">-</span> self<span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token number">400</span><span class="token punctuation">));</span>
|
||||
<span class="token keyword">const</span> <span class="token function-variable function">newRating</span> <span class="token operator">=</span> <span class="token punctuation">(</span>rating<span class="token punctuation">,</span> i<span class="token punctuation">)</span> <span class="token operator">=></span>
|
||||
<span class="token punctuation">(</span>selfRating <span class="token operator">||</span> rating<span class="token punctuation">)</span> <span class="token operator">+</span> kFactor <span class="token operator">*</span> <span class="token punctuation">(</span>i <span class="token operator">-</span> <span class="token function">expectedScore</span><span class="token punctuation">(</span>i <span class="token operator">?</span> a <span class="token punctuation">:</span> b<span class="token punctuation">,</span> i <span class="token operator">?</span> b <span class="token punctuation">:</span> a<span class="token punctuation">));</span>
|
||||
<span class="token keyword">if</span> <span class="token punctuation">(</span>ratings<span class="token punctuation">.</span>length <span class="token operator">===</span> <span class="token number">2</span><span class="token punctuation">) {</span>
|
||||
<span class="token keyword">return</span> <span class="token punctuation">[</span><span class="token function">newRating</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 function">newRating</span><span class="token punctuation">(</span>b<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)];
|
||||
}</span>
|
||||
<span class="token keyword">if</span> <span class="token punctuation">(</span>ratings<span class="token punctuation">.</span>length <span class="token operator">===</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token punctuation">[</span><span class="token function">newRating</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 function">newRating</span><span class="token punctuation">(</span>b<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)];</span>
|
||||
|
||||
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">let</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> len <span class="token operator">=</span> ratings<span class="token punctuation">.</span>length<span class="token punctuation">;</span> i <span class="token operator"><</span> len<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">) {</span>
|
||||
<span class="token keyword">let</span> j <span class="token operator">=</span> i<span class="token punctuation">;</span>
|
||||
<span class="token keyword">while</span> <span class="token punctuation">(</span>j <span class="token operator"><</span> len <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">) {</span>
|
||||
@ -151,8 +150,8 @@ own individual rating by supplying it as the third argument.
|
||||
</pre></div><div class="card code-card"><div class="corner beginner"></div><div class="section card-content"><h4 id="factorial">factorial</h4><p>Calculates the factorial of a number.</p><p>Use recursion. If <code>n</code> is less than or equal to <code>1</code>, return <code>1</code>. Otherwise, return the product of <code>n</code> and the factorial of <code>n - 1</code>. Throws an exception if <code>n</code> is a negative number.</p></div><div class="copy-button-container"><button class="copy-button" aria-label="Copy to clipboard"></button></div><pre class="section card-code language-js"><span class="token keyword">const</span> <span class="token function-variable function">factorial</span> <span class="token operator">=</span> n <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 punctuation">(()</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
|
||||
<span class="token keyword">throw new</span> <span class="token class-name">TypeError</span><span class="token punctuation">(</span><span class="token string">'Negative numbers are not allowed!'</span><span class="token punctuation">);
|
||||
})()
|
||||
<span class="token keyword">throw new</span> <span class="token class-name">TypeError</span><span class="token punctuation">(</span><span class="token string">'Negative numbers are not allowed!'</span><span class="token punctuation">);
|
||||
})()
|
||||
:</span> n <span class="token operator"><=</span> <span class="token number">1</span>
|
||||
<span class="token operator">?</span> <span class="token number">1</span>
|
||||
<span class="token punctuation">:</span> n <span class="token operator">*</span> <span class="token function">factorial</span><span class="token punctuation">(</span>n <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">);</span>
|
||||
@ -282,8 +281,8 @@ own individual rating by supplying it as the third argument.
|
||||
.</span><span class="token function">map</span><span class="token punctuation">((</span>x<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> start<span class="token punctuation">)</span> <span class="token operator">**</span> power<span class="token punctuation">)
|
||||
.</span><span class="token function">reduce</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 number">0</span><span class="token punctuation">);</span>
|
||||
</pre><label class="collapse">examples</label><pre class="section card-examples language-js"><span class="token function">sumPower</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">);</span> <span class="token comment">// 385</span>
|
||||
<span class="token function">sumPower</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">);</span> <span class="token comment">//3025</span>
|
||||
<span class="token function">sumPower</span><span class="token punctuation">(</span><span class="token number">10</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 comment">//2925</span>
|
||||
<span class="token function">sumPower</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">);</span> <span class="token comment">// 3025</span>
|
||||
<span class="token function">sumPower</span><span class="token punctuation">(</span><span class="token number">10</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 comment">// 2925</span>
|
||||
</pre></div><div class="card code-card"><div class="corner beginner"></div><div class="section card-content"><h4 id="tosafeinteger">toSafeInteger</h4><p>Converts a value to a safe integer.</p><p>Use <code>Math.max()</code> and <code>Math.min()</code> to find the closest safe value. Use <code>Math.round()</code> to convert to an integer.</p></div><div class="copy-button-container"><button class="copy-button" aria-label="Copy to clipboard"></button></div><pre class="section card-code language-js"><span class="token keyword">const</span> <span class="token function-variable function">toSafeInteger</span> <span class="token operator">=</span> num <span class="token operator">=></span>
|
||||
Math<span class="token punctuation">.</span><span class="token function">round</span><span class="token punctuation">(</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> Number<span class="token punctuation">.</span><span class="token constant">MAX_SAFE_INTEGER</span><span class="token punctuation">),</span> Number<span class="token punctuation">.</span><span class="token constant">MIN_SAFE_INTEGER</span><span class="token punctuation">));</span>
|
||||
</pre><label class="collapse">examples</label><pre class="section card-examples language-js"><span class="token function">toSafeInteger</span><span class="token punctuation">(</span><span class="token string">'3.2'</span><span class="token punctuation">);</span> <span class="token comment">// 3</span>
|
||||
|
||||
@ -120,7 +120,7 @@
|
||||
</pre></div><div class="card code-card"><div class="corner intermediate"></div><div class="section card-content"><h4 id="deepfreeze">deepFreeze</h4><p>Deep freezes an object.</p><p>Calls <code>Object.freeze(obj)</code> recursively on all unfrozen properties of passed object that are <code>instanceof</code> object.</p></div><div class="copy-button-container"><button class="copy-button" aria-label="Copy to clipboard"></button></div><pre class="section card-code language-js"><span class="token keyword">const</span> <span class="token function-variable function">deepFreeze</span> <span class="token operator">=</span> obj <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 function">forEach</span><span class="token punctuation">(</span>
|
||||
prop <span class="token operator">=>
|
||||
!</span>obj<span class="token punctuation">[</span>prop<span class="token punctuation">]</span> <span class="token keyword">instanceof</span> <span class="token class-name">Object</span> <span class="token operator">||</span> Object<span class="token punctuation">.</span><span class="token function">isFrozen</span><span class="token punctuation">(</span>obj<span class="token punctuation">[</span>prop<span class="token punctuation">])</span> <span class="token operator">?</span> <span class="token keyword">null</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>obj<span class="token punctuation">[</span>prop<span class="token punctuation">]</span> <span class="token keyword">instanceof</span> <span class="token class-name">Object</span><span class="token punctuation">)</span> <span class="token operator">||</span> Object<span class="token punctuation">.</span><span class="token function">isFrozen</span><span class="token punctuation">(</span>obj<span class="token punctuation">[</span>prop<span class="token punctuation">])</span> <span class="token operator">?</span> <span class="token keyword">null</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 operator">||</span> Object<span class="token punctuation">.</span><span class="token function">freeze</span><span class="token punctuation">(</span>obj<span class="token punctuation">);</span>
|
||||
</pre><label class="collapse">examples</label><pre class="section card-examples language-js"><span class="token string">'use strict'</span><span class="token punctuation">;</span>
|
||||
|
||||
@ -134,9 +134,9 @@ o<span class="token punctuation">[</span><span class="token number">1</span><spa
|
||||
target <span class="token keyword">in</span> obj
|
||||
<span class="token operator">?</span> obj<span class="token punctuation">[</span>target<span class="token punctuation">]
|
||||
:</span> Object<span class="token punctuation">.</span><span class="token function">values</span><span class="token punctuation">(</span>obj<span class="token punctuation">).</span><span class="token function">reduce</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>
|
||||
<span class="token keyword">if</span> <span class="token punctuation">(</span>acc <span class="token operator">!==</span> undefined<span class="token punctuation">)</span> <span class="token keyword">return</span> acc<span class="token punctuation">;</span>
|
||||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">typeof</span> val <span class="token operator">===</span> <span class="token string">'object'</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token function">dig</span><span class="token punctuation">(</span>val<span class="token punctuation">,</span> target<span class="token punctuation">);
|
||||
},</span> undefined<span class="token punctuation">);</span>
|
||||
<span class="token keyword">if</span> <span class="token punctuation">(</span>acc <span class="token operator">!==</span> undefined<span class="token punctuation">)</span> <span class="token keyword">return</span> acc<span class="token punctuation">;</span>
|
||||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">typeof</span> val <span class="token operator">===</span> <span class="token string">'object'</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token function">dig</span><span class="token punctuation">(</span>val<span class="token punctuation">,</span> target<span class="token punctuation">);
|
||||
},</span> undefined<span class="token punctuation">);</span>
|
||||
</pre><label class="collapse">examples</label><pre class="section card-examples language-js"><span class="token keyword">const</span> data <span class="token operator">=</span> <span class="token punctuation">{</span>
|
||||
level1<span class="token punctuation">: {</span>
|
||||
level2<span class="token punctuation">: {</span>
|
||||
|
||||
@ -150,7 +150,7 @@
|
||||
</pre><label class="collapse">examples</label><pre class="section card-examples language-js"><span class="token function">httpGet</span><span class="token punctuation">(</span>
|
||||
<span class="token string">'https://jsonplaceholder.typicode.com/posts/1'</span><span class="token punctuation">,</span>
|
||||
console<span class="token punctuation">.</span>log
|
||||
<span class="token punctuation">);</span> <span class="token comment">/*
|
||||
<span class="token punctuation">);</span> <span class="token comment">/*
|
||||
Logs: {
|
||||
"userId": 1,
|
||||
"id": 1,
|
||||
@ -187,7 +187,7 @@ Logs: {
|
||||
*/</span>
|
||||
<span class="token function">httpPost</span><span class="token punctuation">(</span>
|
||||
<span class="token string">'https://jsonplaceholder.typicode.com/posts'</span><span class="token punctuation">,</span>
|
||||
<span class="token keyword">null</span><span class="token punctuation">,</span> <span class="token comment">//does not send a body</span>
|
||||
<span class="token keyword">null</span><span class="token punctuation">,</span> <span class="token comment">// does not send a body</span>
|
||||
console<span class="token punctuation">.</span>log
|
||||
<span class="token punctuation">);</span> <span class="token comment">/*
|
||||
Logs: {
|
||||
|
||||
@ -15,8 +15,7 @@ const elo = ([...ratings], kFactor = 32, selfRating) => {
|
||||
const expectedScore = (self, opponent) => 1 / (1 + 10 ** ((opponent - self) / 400));
|
||||
const newRating = (rating, i) =>
|
||||
(selfRating || rating) + kFactor * (i - expectedScore(i ? a : b, i ? b : a));
|
||||
if (ratings.length === 2)
|
||||
return [newRating(a, 1), newRating(b, 0)];
|
||||
if (ratings.length === 2) return [newRating(a, 1), newRating(b, 0)];
|
||||
|
||||
for (let i = 0, len = ratings.length; i < len; i++) {
|
||||
let j = i;
|
||||
|
||||
@ -28,11 +28,9 @@ const runAsync = fn => {
|
||||
const longRunningFunction = () => {
|
||||
let result = 0;
|
||||
for (let i = 0; i < 1000; i++) {
|
||||
for (let j = 0; j < 700; j++) {
|
||||
for (let k = 0; k < 300; k++)
|
||||
result = result + i + j + k;
|
||||
for (let j = 0; j < 700; j++)
|
||||
for (let k = 0; k < 300; k++) result = result + i + j + k;
|
||||
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user