Adapter
ary
Creates a function that accepts up to n arguments, ignoring any additional arguments.
Call the provided function, fn, with up to n arguments, using Array.slice(0,n) and the spread operator (...).
const ary = (fn, n) => (...args) => fn(...args.slice(0, n)); + }
30 seconds of code Curated collection of useful JavaScript snippets that you can understand in 30 seconds or less.
Adapter
ary
Creates a function that accepts up to
narguments, ignoring any additional arguments.Call the provided function,
fn, with up tonarguments, usingArray.slice(0,n)and the spread operator (...).const ary = (fn, n) => (...args) => fn(...args.slice(0, n));const firstTwoMax = ary(Math.max, 2); [[2, 6, 'a'], [8, 4, 6], [10]].map(x => firstTwoMax(...x)); // [6, 8, 10]call
Given a key and a set of arguments, call them when given a context. Primarily useful in composition.
Use a closure to call a stored key with stored arguments.
const call = (key, ...args) => context => context[key](...args); @@ -1883,6 +1883,24 @@ Logs: { "id": 101 } */ +mostPerformant
Returns the index of the function in an array of functions which executed the fastest.
Use
Array.map()to generate an array where each value is the total time taken to execute the function afteriterationstimes. Use the difference inperformance.now()values before and after to get the total time in milliseconds to a high degree of accuracy. UseMath.min()to find the minimum execution time, and return the index of that shortest time which corresponds to the index of the most performant function. Omit the second argument,iterations, to use a default of 10,000 iterations. The more iterations, the more reliable the result but the longer it will take.const mostPerformant = (fns, iterations = 10000) => { + const times = fns.map(fn => { + const before = performance.now(); + for (let i = 0; i < iterations; i++) fn(); + return performance.now() - before; + }); + return times.indexOf(Math.min(...times)); +}; +mostPerformant([ + () => { + // Loops through the entire array before returning `false` + [1, 2, 3, 4, 5, 6, 7, 8, 9, '10'].every(el => typeof el === 'number'); + }, + () => { + // Only needs to reach index `1` before returning false + [1, '2', 3, 4, 5, 6, 7, 8, 9, 10].every(el => typeof el === 'number'); + } +]); // 1nthArg
Creates a function that gets the argument at index
n. Ifnis negative, the nth argument from the end is returned.Use
Array.slice()to get the desired argument at indexn.const nthArg = n => (...args) => args.slice(n)[0];const third = nthArg(2); third(1, 2, 3); // 3 diff --git a/snippets/mostPerformant.md b/snippets/mostPerformant.md index 2185b7a29..66cd591e2 100644 --- a/snippets/mostPerformant.md +++ b/snippets/mostPerformant.md @@ -21,11 +21,11 @@ const mostPerformant = (fns, iterations = 10000) => { mostPerformant([ () => { // Loops through the entire array before returning `false` - [1, 2, 3, 4, 5, 6, 7, 8, 9, '10'].every(el => typeof el === 'number') + [1, 2, 3, 4, 5, 6, 7, 8, 9, '10'].every(el => typeof el === 'number'); }, () => { // Only needs to reach index `1` before returning false - [1, '2', 3, 4, 5, 6, 7, 8, 9, 10].every(el => typeof el === 'number') + [1, '2', 3, 4, 5, 6, 7, 8, 9, 10].every(el => typeof el === 'number'); } ]); // 1 ```