Curated collection of useful Javascript snippets that you can understand in 30 seconds or less.
- Use Ctrl + F or command + F to search for a snippet.
- Contributions welcome, please read contribution guide.
- Anagrams of string (with duplicates)
- Average of array of numbers
- Capitalize first letter
- Count occurrences of a value in array
- Current URL
- Curry
- Difference between arrays
- Distance between two points
- Escape regular expression
- Even or odd number
- Factorial
- Fibonacci array generator
- Flatten array
- Greatest common divisor (GCD)
- Head of list
- Initial of list
- Initialize array with range
- Initialize array with values
- Last of list
- Measure time taken by function
- Object from key value pairs
- Powerset
- Random number in range
- Randomize order of array
- Redirect to url
- RGB to hexadecimal
- Scroll to top
- Similarity between arrays
- Sort characters in string (alphabetical)
- Sum of array of numbers
- Swap values of two variables
- Tail of list
- Unique values of array
- URL parameters
- UUID generator
- Validate number
Use recursion.
For each letter in the given string, create all the partial anagrams for the rest of its letters.
Use map()
to combine the letter with each partial anagram, then reduce()
to combine all anagrams in one array.
Base cases are for string length
equal to 2
or 1
.
var anagrams = s => {
if(s.length <= 2) return s.length === 2 ? [s, s[1] + s[0]] : [s];
return s.split('').reduce( (a,l,i) => {
anagrams(s.slice(0,i) + s.slice(i+1)).map( v => a.push(l+v) );
return a;
}, []);
}
Use reduce()
to add each value to an accumulator, initialized with a value of 0
, divide by the length
of the array.
var average = arr =>
arr.reduce( (acc , val) => acc + val, 0) / arr.length;
Use toUpperCase()
to capitalize first letter, slice(1)
to get the rest of the string.
var capitalize = str => str[0].toUpperCase() + str.slice(1);
Use filter()
to create an array containing only the items with the specified value, count them using length
.
var countOccurrences = (arr, value) => arr.filter(v => v === value).length;
Use window.location.href
to get current URL.
var currentUrl = _ => window.location.href;
Use recursion.
If the number of provided arguments (args
) is sufficient, call the passed function f
.
Otherwise return a curried function f
that expects the rest of the arguments.
var curry = f =>
(...args) =>
args.length >= f.length ? f(...args) : (...otherArgs) => curry(f)(...args, ...otherArgs)
Use filter()
to remove values that are part of values
, determined using indexOf()
.
var difference = (arr, values) =>
arr.filter(v => values.indexOf(v) === -1);
Use Math.pow()
and Math.sqrt()
to calculate the Euclidean distance between two points.
var distance = x0, y0, x1, y1 =>
Math.sqrt(Math.pow(x1-x0, 2) + Math.pow(y1 - y0, 2))
Use replace()
to escape special characters.
var escapeRegExp = s =>
s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
Use Math.abs()
to extend logic to negative numbers, check using the modulo (%
) operator.
Return true
if the number is even, false
if the number is odd.
var isEven = num => Math.abs(num) % 2 === 0;
Create an array of length n+1
, use reduce()
to get the product of every value in the given range, utilizing the index of each element.
var factorial = n =>
Array.apply(null, [1].concat(Array(n))).reduce( (a, _, i) => a * i || 1 , 1);
Create an empty array of the specific length, initializing the first two values (0
and 1
).
Use reduce()
to add values into the array, using the sum of the last two values, except for the first two.
var fibonacci = n =>
Array.apply(null, [0,1].concat(Array(n-2))).reduce(
(acc, val, i) => {
acc.push( i>1 ? acc[i-1]+acc[i-2] : val);
return acc;
},[]);
Use recursion.
Use reduce()
to get all elements that are not arrays, flatten each element that is an array.
var flatten = arr =>
arr.reduce( (a, v) => a.concat( Array.isArray(v) ? flatten(v) : v ), []);
Use recursion.
Base case is when y
equals 0
. In this case, return x
.
Otherwise, return the GCD of y
and the remainder of the division x/y
.
var gcd = (x , y) => !y ? x : gcd(y, x % y);
Return arr[0]
.
var head = arr => arr[0];
Return arr.slice(0,-1)
.
var initial = arr => arr.slice(0,-1);
Use Array(end-start)
to create an array of the desired length, map()
to fill with the desired values in a range.
You can omit start
to use a default value of 0
.
var initializeArrayRange = (end, start = 0) =>
Array.apply(null, Array(end-start)).map( (v,i) => i + start );
Use Array(n)
to create an array of the desired length, fill(v)
to fill it with the desired values.
You can omit v
to use a default value of 0
.
var initializeArray = (n, v = 0) =>
Array(n).fill(v);
Return arr.slice(-1)[0]
.
var initial = arr => arr.slice(-1)[0];
Use performance.now()
to get start and end time for the function, console.log()
the time taken.
First argument is the function name, subsequent arguments are passed to the function.
var timeTaken = (f,...args) => {
var t0 = performance.now(), r = f(...args);
console.log(performance.now() - t0);
return r;
}
Use map()
to create objects for each key-value pair, combine with Object.assign()
.
var objectFromPairs = arr =>
Object.assign(...arr.map( v => {return {[v[0]] : v[1]};} ));
Use reduce()
combined with map()
to iterate over elements and combine into an array containing all combinations.
var powerset = arr =>
arr.reduce( (a,v) => a.concat(a.map( r => [v].concat(r) )), [[]]);
Use Math.random()
to generate a random value, map it to the desired range using multiplication.
var randomInRange = (min, max) => Math.random() * (max - min) + min;
Use sort()
to reorder elements, utilizing Math.random()
to randomize the sorting.
var randomizeOrder = arr => arr.sort( (a,b) => Math.random() >= 0.5 ? -1 : 1)
Use window.location.href
or window.location.replace()
to redirect to url
.
Pass a second argument to simulate a link click (true
- default) or an HTTP redirect (false
).
var redirect = (url, asLink = true) =>
asLink ? window.location.href = url : window.location.replace(url);
Convert each value to a hexadecimal string, using toString(16)
, then padStart(2,'0')
to get a 2-digit hexadecimal value.
Combine values using join('')
.
var rgbToHex = (r, g, b) =>
[r,g,b].map( v => v.toString(16).padStart(2,'0')).join('');
Get distance from top using document.documentElement.scrollTop
or document.body.scrollTop
.
Scroll by a fraction of the distance from top. Use window.requestFrame()
to animate the scrolling.
var scrollToTop = _ => {
var c = document.documentElement.scrollTop || document.body.scrollTop;
if(c > 0) {
window.requestAnimationFrame(scrollToTop);
window.scrollTo(0, c - c/8);
}
}
Use filter()
to remove values that are not part of values
, determined using indexOf()
.
var difference = (arr, values) =>
arr.filter(v => values.indexOf(v) !== -1);
Split the string using split('')
, sort()
utilizing localeCompare()
, recombine using join('')
.
var sortCharactersInString = str =>
str.split('').sort( (a,b) => a.localeCompare(b) ).join('');
Use reduce()
to add each value to an accumulator, initialized with a value of 0
.
var sum = arr =>
arr.reduce( (acc , val) => acc + val, 0);
Use array destructuring to swap values between two variables.
[varA, varB] = [varB, varA];
Return arr.slice(1)
.
var tail = arr => arr.slice(1);
Use reduce()
to accumulate all unique values in an array.
Check if each value has already been added, using indexOf()
on the accumulator array.
var uniqueValues = arr =>
arr.reduce( (acc, val) => {
if(acc.indexOf(val) === -1)
acc.push(val);
return acc;
}, []);
Use match()
with an appropriate regular expression to get all key-value pairs, map()
them appropriately.
Combine all key-value pairs into a single object using Object.assign()
and the spread operator (...
).
Pass location.search
as the argument to apply to the current url
.
var getUrlParameters = url =>
Object.assign(...url.match(/([^?=&]+)(=([^&]*))?/g).map(m => {[f,v] = m.split('='); return {[f]:v}}));
Use crypto
API to generate a UUID, compliant with RFC4122 version 4.
var uuid = _ =>
( [1e7]+-1e3+-4e3+-8e3+-1e11 ).replace( /[018]/g, c =>
(c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
)
Use !isNaN
in combination with parseFloat()
to check if the argument is a number.
Use isFinite()
to check if the number is finite.
var validateNumber = n => !isNaN(parseFloat(n)) && isFinite(n);
Icons made by Smashicons from www.flaticon.com is licensed by CC 3.0 BY.