Merge branch 'master' into capitalize-every-letter

This commit is contained in:
Angelos Chalaris
2017-12-12 15:36:54 +02:00
committed by GitHub
43 changed files with 184 additions and 143 deletions

View File

@ -1,11 +1,11 @@
## Contributing
You can cntribute to **30 seconds of code** by sending pull requests for snippets that you find useful, reporting issues with current snippets or suggesting changes and/or additions.
You can contribute to **30 seconds of code** by sending pull requests for snippets that you find useful, reporting issues with current snippets or suggesting changes and/or additions.
### Guidelines for new snippets
- Snippets must be short. Usually anything above 10 lines would be considered too long, but you can still submit it as it might be possible to shorten it or it might still prove useful regardless of its length.
- Snippets must be explain to a certain extent in the description above them. Make sure to include what functions you are using and why.
- Snippets must be explained to a certain extent in the description above them. Make sure to include what functions you are using and why.
- Snippets must solve real-world problems and should be abstract enough to use in different scenarios. This is highly subjective, so send them in anyways.
- Snippets *should* be written in ES6 if possible.
- Snippet files must follow the anchor name conventions of (GitHub Flavored Markdown)[https://github.github.com/gfm/], so that the `builder.js` can build the links for the list.

25
LICENSE
View File

@ -1,21 +1,4 @@
MIT License
Copyright (c) 2017 Angelos Chalaris
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
30 seconds of code is licensed under Creative Commons CC0 1.0 Universal license.
https://creativecommons.org/publicdomain/zero/1.0/
The license states, "You can copy, modify, distribute and perform the work, even for commercial purposes,
all without asking permission." Additionally, we ask that groups utilizing this ontology reference this project.

142
README.md
View File

@ -12,7 +12,7 @@
* [Average of array of numbers](#average-of-array-of-numbers)
* [Capitalize first letter](#capitalize-first-letter)
* [Capitalize first letter of every word](#capitalize-first-letter-of-every-word)
* [Count occurences of a value in array](#count-occurences-of-a-value-in-array)
* [Count occurrences of a value in array](#count-occurrences-of-a-value-in-array)
* [Current URL](#current-url)
* [Curry](#curry)
* [Difference between arrays](#difference-between-arrays)
@ -21,7 +21,9 @@
* [Even or odd number](#even-or-odd-number)
* [Factorial](#factorial)
* [Fibonacci array generator](#fibonacci-array-generator)
* [Filter out non uniqe values in an array](#filter-out-non-uniqe-values-in-an-array)
* [Flatten array](#flatten-array)
* [Get scroll position](#get-scroll-position)
* [Greatest common divisor (GCD)](#greatest-common-divisor-gcd)
* [Head of list](#head-of-list)
* [Initial of list](#initial-of-list)
@ -34,6 +36,7 @@
* [Random number in range](#random-number-in-range)
* [Randomize order of array](#randomize-order-of-array)
* [Redirect to url](#redirect-to-url)
* [Reverse a string](#reverse-a-string)
* [RGB to hexadecimal](#rgb-to-hexadecimal)
* [Scroll to top](#scroll-to-top)
* [Similarity between arrays](#similarity-between-arrays)
@ -54,7 +57,7 @@ Use `map()` to combine the letter with each partial anagram, then `reduce()` to
Base cases are for string `length` equal to `2` or `1`.
```js
var anagrams = s => {
const 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) );
@ -68,16 +71,16 @@ var anagrams = s => {
Use `reduce()` to add each value to an accumulator, initialized with a value of `0`, divide by the `length` of the array.
```js
var average = arr =>
const average = arr =>
arr.reduce( (acc , val) => acc + val, 0) / arr.length;
```
### Capitalize first letter
Use `toUpperCase()` to capitalize first letter, `slice(1)` to get the rest of the string.
Use `slice(0,1)` and `toUpperCase()` to capitalize first letter, `slice(1)` to get the rest of the string.
```js
var capitalize = str => str[0].toUpperCase() + str.slice(1);
const capitalize = str => str.slice(0, 1).toUpperCase() + str.slice(1);
```
### Capitalize first letter of every word
@ -87,13 +90,13 @@ Use `replace()` to match the first character of each word and `toUpperCase()` to
```js
var capitalizeEveryWord = str => str.replace(/\b[a-z]/g, char => char.toUpperCase());
```
### Count occurrences of a value in array
### Count occurences of a value in array
Use `filter()` to create an array containing only the items with the specified value, count them using `length`.
Use `reduce()` to increment a counter each time you encounter the specific value inside the array.
```js
var countOccurences = (arr, value) => arr.filter(v => v === value).length;
const countOccurrences = (arr, value) => arr.reduce((a, v) => v===value ? a + 1 : a + 0, 0);
```
### Current URL
@ -101,7 +104,7 @@ var countOccurences = (arr, value) => arr.filter(v => v === value).length;
Use `window.location.href` to get current URL.
```js
var currentUrl = _ => window.location.href;
const currentUrl = _ => window.location.href;
```
### Curry
@ -111,27 +114,25 @@ If the number of provided arguments (`args`) is sufficient, call the passed func
Otherwise return a curried function `f` that expects the rest of the arguments.
```js
var curry = f =>
const curry = f =>
(...args) =>
args.length >= f.length ? f(...args) : (...otherArgs) => curry(f)(...args, ...otherArgs)
```
### Difference between arrays
Use `filter()` to remove values that are part of `values`, determined using `indexOf()`.
Use `filter()` to remove values that are part of `values`, determined using `includes()`.
```js
var difference = (arr, values) =>
arr.filter(v => values.indexOf(v) === -1);
const difference = (arr, values) => arr.filter(v => !values.includes(v));
```
### Distance between two points
Use `Math.pow()` and `Math.sqrt()` to calculate the Euclidean distance between two points.
Use `Math.hypot()` to calculate the Euclidean distance between two points.
```js
var distance = x0, y0, x1, y1 =>
Math.sqrt(Math.pow(x1-x0, 2) + Math.pow(y1 - y0, 2))
const distance = (x0, y0, x1, y1) => Math.hypot(x1 - x0, y1 - y0);
```
### Escape regular expression
@ -139,7 +140,7 @@ var distance = x0, y0, x1, y1 =>
Use `replace()` to escape special characters.
```js
var escapeRegExp = s =>
const escapeRegExp = s =>
s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
```
@ -150,16 +151,17 @@ Use `Math.abs()` to extend logic to negative numbers, check using the modulo (`%
Return `true` if the number is even, `false` if the number is odd.
```js
var isEven = num => Math.abs(num) % 2 === 0;
const isEven = num => Math.abs(num) % 2 === 0;
```
### Factorial
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.
Use recursion.
If `n` is less than or equal to `1`, return `1`.
Otherwise, return the product of `n` and the factorial of `n - 1`.
```js
var factorial = n =>
Array.apply(null, [1].concat(Array(n))).reduce( (a, _, i) => a * i || 1 , 1);
const factorial = n => n <= 1 ? 1 : n * factorial(n - 1)
```
### Fibonacci array generator
@ -168,7 +170,7 @@ Create an empty array of the specific length, initializing the first two values
Use `reduce()` to add values into the array, using the sum of the last two values, except for the first two.
```js
var fibonacci = n =>
const 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);
@ -176,16 +178,37 @@ var fibonacci = n =>
},[]);
```
### Filter out non-unique values in an array
Use `Array.filter()` for an array containing only the unique values.
```js
const unique = arr => arr.filter(i => arr.indexOf(i) === arr.lastIndexOf(i));
// unique([1,2,2,3,4,4,5]) -> [1,3,5]
```
### Flatten array
Use recursion.
Use `reduce()` to get all elements that are not arrays, flatten each element that is an array.
```js
var flatten = arr =>
const flatten = arr =>
arr.reduce( (a, v) => a.concat( Array.isArray(v) ? flatten(v) : v ), []);
```
## Get scroll position
Use `pageXOffset` and `pageYOffset` if they are defined, otherwise `scrollLeft` and `scrollTop`.
You can omit `el` to use a default value of `window`.
```js
const getScrollPos = (el = window) =>
( {x: (el.pageXOffset !== undefined) ? el.pageXOffset : el.scrollLeft,
y: (el.pageYOffset !== undefined) ? el.pageYOffset : el.scrollTop} );
// getScrollPos() -> {x: 0, y: 200}
```
### Greatest common divisor (GCD)
Use recursion.
@ -193,7 +216,7 @@ 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`.
```js
var gcd = (x , y) => !y ? x : gcd(y, x % y);
const gcd = (x , y) => !y ? x : gcd(y, x % y);
```
### Head of list
@ -201,7 +224,7 @@ var gcd = (x , y) => !y ? x : gcd(y, x % y);
Return `arr[0]`.
```js
var head = arr => arr[0];
const head = arr => arr[0];
```
### Initial of list
@ -209,7 +232,7 @@ var head = arr => arr[0];
Return `arr.slice(0,-1)`.
```js
var initial = arr => arr.slice(0,-1);
const initial = arr => arr.slice(0,-1);
```
### Initialize array with range
@ -218,7 +241,7 @@ Use `Array(end-start)` to create an array of the desired length, `map()` to fill
You can omit `start` to use a default value of `0`.
```js
var initializeArrayRange = (end, start = 0) =>
const initializeArrayRange = (end, start = 0) =>
Array.apply(null, Array(end-start)).map( (v,i) => i + start );
```
@ -228,7 +251,7 @@ Use `Array(n)` to create an array of the desired length, `fill(v)` to fill it wi
You can omit `v` to use a default value of `0`.
```js
var initializeArray = (n, v = 0) =>
const initializeArray = (n, v = 0) =>
Array(n).fill(v);
```
@ -237,7 +260,7 @@ var initializeArray = (n, v = 0) =>
Return `arr.slice(-1)[0]`.
```js
var initial = arr => arr.slice(-1)[0];
const last = arr => arr.slice(-1)[0];
```
### Measure time taken by function
@ -246,9 +269,9 @@ Use `performance.now()` to get start and end time for the function, `console.log
First argument is the function name, subsequent arguments are passed to the function.
```js
var timeTaken = (f,...args) => {
const timeTaken = (f,...args) => {
var t0 = performance.now(), r = f(...args);
console.log({performance.now() - t0);
console.log(performance.now() - t0);
return r;
}
```
@ -258,16 +281,16 @@ var timeTaken = (f,...args) => {
Use `map()` to create objects for each key-value pair, combine with `Object.assign()`.
```js
var objectFromPairs = arr =>
const objectFromPairs = arr =>
Object.assign(...arr.map( v => {return {[v[0]] : v[1]};} ));
```
### Powerset
Use `reduce()` combined with `map()` to iterate over elements and combine into an array containing all combinations.
Use `reduce()` combined with `map()` to iterate over elements and combine into an array containing all combinations.
```js
var powerset = arr =>
const powerset = arr =>
arr.reduce( (a,v) => a.concat(a.map( r => [v].concat(r) )), [[]]);
```
@ -276,7 +299,7 @@ var powerset = arr =>
Use `Math.random()` to generate a random value, map it to the desired range using multiplication.
```js
var randomInRange = (min, max) => Math.random() * (max - min) + min;
const randomInRange = (min, max) => Math.random() * (max - min) + min;
```
### Randomize order of array
@ -284,7 +307,7 @@ var randomInRange = (min, max) => Math.random() * (max - min) + min;
Use `sort()` to reorder elements, utilizing `Math.random()` to randomize the sorting.
```js
var randomizeOrder = arr => arr.sort( (a,b) => Math.random() >= 0.5 ? -1 : 1)
const randomizeOrder = arr => arr.sort( (a,b) => Math.random() >= 0.5 ? -1 : 1)
```
### Redirect to URL
@ -293,28 +316,37 @@ 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`).
```js
var redirect = (url, asLink = true) =>
const redirect = (url, asLink = true) =>
asLink ? window.location.href = url : window.location.replace(url);
```
### Reverse a string
Use array destructuring and `Array.reverse()` to reverse the order of the characters in the string.
Combine characters to get a string using `join('')`.
```js
const reverseString = str => [...str].reverse().join('');
```
### RGB to hexadecimal
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('')`.
```js
var rgbToHex = (r, g, b) =>
const rgbToHex = (r, g, b) =>
[r,g,b].map( v => v.toString(16).padStart(2,'0')).join('');
```
### Scroll to top
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.
Scroll by a fraction of the distance from top. Use `window.requestAnimationFrame()` to animate the scrolling.
```js
var scrollToTop = _ => {
var c = document.documentElement.scrollTop || document.body.scrollTop;
const scrollToTop = _ => {
const c = document.documentElement.scrollTop || document.body.scrollTop;
if(c > 0) {
window.requestAnimationFrame(scrollToTop);
window.scrollTo(0, c - c/8);
@ -324,11 +356,10 @@ var scrollToTop = _ => {
### Similarity between arrays
Use `filter()` to remove values that are not part of `values`, determined using `indexOf()`.
Use `filter()` to remove values that are not part of `values`, determined using `includes()`.
```js
var difference = (arr, values) =>
arr.filter(v => values.indexOf(v) !== -1);
const difference = (arr, values) => arr.filter(v => values.includes(v));
```
### Sort characters in string (alphabetical)
@ -336,7 +367,7 @@ var difference = (arr, values) =>
Split the string using `split('')`, `sort()` utilizing `localeCompare()`, recombine using `join('')`.
```js
var sortCharactersInString = str =>
const sortCharactersInString = str =>
str.split('').sort( (a,b) => a.localeCompare(b) ).join('');
```
@ -345,7 +376,7 @@ var sortCharactersInString = str =>
Use `reduce()` to add each value to an accumulator, initialized with a value of `0`.
```js
var sum = arr =>
const sum = arr =>
arr.reduce( (acc , val) => acc + val, 0);
```
@ -362,21 +393,16 @@ Use array destructuring to swap values between two variables.
Return `arr.slice(1)`.
```js
var tail = arr => arr.slice(1);
const tail = arr => arr.slice(1);
```
### Unique values of array
Use `reduce()` to accumulate all unique values in an array.
Check if each value has already been added, using `indexOf()` on the accumulator array.
Use ES6 `Set` and the `...rest` operator to discard all duplicated values.
```js
var uniqueValues = arr =>
arr.reduce( (acc, val) => {
if(acc.indexOf(val) === -1)
acc.push(val);
return acc;
}, []);
const unique = arr => [...new Set(arr)];
// unique([1,2,2,3,4,4,5]) -> [1,2,3,4,5]
```
### URL parameters
@ -386,7 +412,7 @@ Combine all key-value pairs into a single object using `Object.assign()` and the
Pass `location.search` as the argument to apply to the current `url`.
```js
var getUrlParameters = url =>
const getUrlParameters = url =>
Object.assign(...url.match(/([^?=&]+)(=([^&]*))?/g).map(m => {[f,v] = m.split('='); return {[f]:v}}));
```
@ -395,7 +421,7 @@ var getUrlParameters = url =>
Use `crypto` API to generate a UUID, compliant with [RFC4122](https://www.ietf.org/rfc/rfc4122.txt) version 4.
```js
var uuid = _ =>
const uuid = _ =>
( [1e7]+-1e3+-4e3+-8e3+-1e11 ).replace( /[018]/g, c =>
(c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
)
@ -407,7 +433,7 @@ Use `!isNaN` in combination with `parseFloat()` to check if the argument is a nu
Use `isFinite()` to check if the number is finite.
```js
var validateNumber = n => !isNaN(parseFloat(n)) && isFinite(n);
const validateNumber = n => !isNaN(parseFloat(n)) && isFinite(n);
```
## Credits

View File

@ -7,7 +7,19 @@ var staticPartsPath = './static-parts';
var snippets = {}, startPart = '', endPart = '', output = '';
try {
for(var snippet of fs.readdirSync(snippetsPath)){
var snippetFilenames = fs.readdirSync(snippetsPath);
snippetFilenames.sort((a, b) => {
a = a.toLowerCase();
b = b.toLowerCase();
if (a < b) {
return -1;
}
if (a > b) {
return 1;
}
return 0;
});
for(var snippet of snippetFilenames){
snippets[snippet] = fs.readFileSync(path.join(snippetsPath,snippet),'utf8');
}
}

View File

@ -4,6 +4,6 @@ Convert each value to a hexadecimal string, using `toString(16)`, then `padStart
Combine values using `join('')`.
```js
var rgbToHex = (r, g, b) =>
const rgbToHex = (r, g, b) =>
[r,g,b].map( v => v.toString(16).padStart(2,'0')).join('');
```

View File

@ -5,6 +5,6 @@ Combine all key-value pairs into a single object using `Object.assign()` and the
Pass `location.search` as the argument to apply to the current `url`.
```js
var getUrlParameters = url =>
const getUrlParameters = url =>
Object.assign(...url.match(/([^?=&]+)(=([^&]*))?/g).map(m => {[f,v] = m.split('='); return {[f]:v}}));
```

View File

@ -3,7 +3,7 @@
Use `crypto` API to generate a UUID, compliant with [RFC4122](https://www.ietf.org/rfc/rfc4122.txt) version 4.
```js
var uuid = _ =>
const uuid = _ =>
( [1e7]+-1e3+-4e3+-8e3+-1e11 ).replace( /[018]/g, c =>
(c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
)

View File

@ -6,7 +6,7 @@ Use `map()` to combine the letter with each partial anagram, then `reduce()` to
Base cases are for string `length` equal to `2` or `1`.
```js
var anagrams = s => {
const 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) );

View File

@ -3,6 +3,6 @@
Use `reduce()` to add each value to an accumulator, initialized with a value of `0`, divide by the `length` of the array.
```js
var average = arr =>
const average = arr =>
arr.reduce( (acc , val) => acc + val, 0) / arr.length;
```

View File

@ -1,7 +1,7 @@
### Capitalize first letter
Use `toUpperCase()` to capitalize first letter, `slice(1)` to get the rest of the string.
Use `slice(0,1)` and `toUpperCase()` to capitalize first letter, `slice(1)` to get the rest of the string.
```js
var capitalize = str => str[0].toUpperCase() + str.slice(1);
const capitalize = str => str.slice(0, 1).toUpperCase() + str.slice(1);
```

View File

@ -1,7 +0,0 @@
### Count occurences of a value in array
Use `filter()` to create an array containing only the items with the specified value, count them using `length`.
```js
var countOccurences = (arr, value) => arr.filter(v => v === value).length;
```

View File

@ -0,0 +1,7 @@
### Count occurrences of a value in array
Use `reduce()` to increment a counter each time you encounter the specific value inside the array.
```js
const countOccurrences = (arr, value) => arr.reduce((a, v) => v===value ? a + 1 : a + 0, 0);
```

View File

@ -3,5 +3,5 @@
Use `window.location.href` to get current URL.
```js
var currentUrl = _ => window.location.href;
const currentUrl = _ => window.location.href;
```

View File

@ -5,7 +5,7 @@ If the number of provided arguments (`args`) is sufficient, call the passed func
Otherwise return a curried function `f` that expects the rest of the arguments.
```js
var curry = f =>
const curry = f =>
(...args) =>
args.length >= f.length ? f(...args) : (...otherArgs) => curry(f)(...args, ...otherArgs)
```

View File

@ -1,8 +1,7 @@
### Difference between arrays
Use `filter()` to remove values that are part of `values`, determined using `indexOf()`.
Use `filter()` to remove values that are part of `values`, determined using `includes()`.
```js
var difference = (arr, values) =>
arr.filter(v => values.indexOf(v) === -1);
const difference = (arr, values) => arr.filter(v => !values.includes(v));
```

View File

@ -1,8 +1,7 @@
### Distance between two points
Use `Math.pow()` and `Math.sqrt()` to calculate the Euclidean distance between two points.
Use `Math.hypot()` to calculate the Euclidean distance between two points.
```js
var distance = x0, y0, x1, y1 =>
Math.sqrt(Math.pow(x1-x0, 2) + Math.pow(y1 - y0, 2))
const distance = (x0, y0, x1, y1) => Math.hypot(x1 - x0, y1 - y0);
```

View File

@ -3,7 +3,7 @@
Use `replace()` to escape special characters.
```js
var escapeRegExp = s =>
const escapeRegExp = s =>
s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
```

View File

@ -4,5 +4,5 @@ Use `Math.abs()` to extend logic to negative numbers, check using the modulo (`%
Return `true` if the number is even, `false` if the number is odd.
```js
var isEven = num => Math.abs(num) % 2 === 0;
const isEven = num => Math.abs(num) % 2 === 0;
```

View File

@ -1,8 +1,9 @@
### Factorial
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.
Use recursion.
If `n` is less than or equal to `1`, return `1`.
Otherwise, return the product of `n` and the factorial of `n - 1`.
```js
var factorial = n =>
Array.apply(null, [1].concat(Array(n))).reduce( (a, _, i) => a * i || 1 , 1);
const factorial = n => n <= 1 ? 1 : n * factorial(n - 1)
```

View File

@ -4,7 +4,7 @@ Create an empty array of the specific length, initializing the first two values
Use `reduce()` to add values into the array, using the sum of the last two values, except for the first two.
```js
var fibonacci = n =>
const 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);

View File

@ -0,0 +1,8 @@
### Filter out non-unique values in an array
Use `Array.filter()` for an array containing only the unique values.
```js
const unique = arr => arr.filter(i => arr.indexOf(i) === arr.lastIndexOf(i));
// unique([1,2,2,3,4,4,5]) -> [1,3,5]
```

View File

@ -4,6 +4,6 @@ Use recursion.
Use `reduce()` to get all elements that are not arrays, flatten each element that is an array.
```js
var flatten = arr =>
const flatten = arr =>
arr.reduce( (a, v) => a.concat( Array.isArray(v) ? flatten(v) : v ), []);
```

View File

@ -0,0 +1,11 @@
## Get scroll position
Use `pageXOffset` and `pageYOffset` if they are defined, otherwise `scrollLeft` and `scrollTop`.
You can omit `el` to use a default value of `window`.
```js
const getScrollPos = (el = window) =>
( {x: (el.pageXOffset !== undefined) ? el.pageXOffset : el.scrollLeft,
y: (el.pageYOffset !== undefined) ? el.pageYOffset : el.scrollTop} );
// getScrollPos() -> {x: 0, y: 200}
```

View File

@ -5,5 +5,5 @@ 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`.
```js
var gcd = (x , y) => !y ? x : gcd(y, x % y);
const gcd = (x , y) => !y ? x : gcd(y, x % y);
```

View File

@ -3,5 +3,5 @@
Return `arr[0]`.
```js
var head = arr => arr[0];
const head = arr => arr[0];
```

View File

@ -3,5 +3,5 @@
Return `arr.slice(0,-1)`.
```js
var initial = arr => arr.slice(0,-1);
const initial = arr => arr.slice(0,-1);
```

View File

@ -4,6 +4,6 @@ Use `Array(end-start)` to create an array of the desired length, `map()` to fill
You can omit `start` to use a default value of `0`.
```js
var initializeArrayRange = (end, start = 0) =>
const initializeArrayRange = (end, start = 0) =>
Array.apply(null, Array(end-start)).map( (v,i) => i + start );
```

View File

@ -4,6 +4,6 @@ Use `Array(n)` to create an array of the desired length, `fill(v)` to fill it wi
You can omit `v` to use a default value of `0`.
```js
var initializeArray = (n, v = 0) =>
const initializeArray = (n, v = 0) =>
Array(n).fill(v);
```

View File

@ -3,5 +3,5 @@
Return `arr.slice(-1)[0]`.
```js
var initial = arr => arr.slice(-1)[0];
const last = arr => arr.slice(-1)[0];
```

View File

@ -4,9 +4,9 @@ Use `performance.now()` to get start and end time for the function, `console.log
First argument is the function name, subsequent arguments are passed to the function.
```js
var timeTaken = (f,...args) => {
const timeTaken = (f,...args) => {
var t0 = performance.now(), r = f(...args);
console.log({performance.now() - t0);
console.log(performance.now() - t0);
return r;
}
```

View File

@ -3,6 +3,6 @@
Use `map()` to create objects for each key-value pair, combine with `Object.assign()`.
```js
var objectFromPairs = arr =>
const objectFromPairs = arr =>
Object.assign(...arr.map( v => {return {[v[0]] : v[1]};} ));
```

View File

@ -1,8 +1,8 @@
### Powerset
Use `reduce()` combined with `map()` to iterate over elements and combine into an array containing all combinations.
Use `reduce()` combined with `map()` to iterate over elements and combine into an array containing all combinations.
```js
var powerset = arr =>
const powerset = arr =>
arr.reduce( (a,v) => a.concat(a.map( r => [v].concat(r) )), [[]]);
```

View File

@ -3,5 +3,5 @@
Use `Math.random()` to generate a random value, map it to the desired range using multiplication.
```js
var randomInRange = (min, max) => Math.random() * (max - min) + min;
const randomInRange = (min, max) => Math.random() * (max - min) + min;
```

View File

@ -3,5 +3,5 @@
Use `sort()` to reorder elements, utilizing `Math.random()` to randomize the sorting.
```js
var randomizeOrder = arr => arr.sort( (a,b) => Math.random() >= 0.5 ? -1 : 1)
const randomizeOrder = arr => arr.sort( (a,b) => Math.random() >= 0.5 ? -1 : 1)
```

View File

@ -4,6 +4,6 @@ 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`).
```js
var redirect = (url, asLink = true) =>
const redirect = (url, asLink = true) =>
asLink ? window.location.href = url : window.location.replace(url);
```

View File

@ -0,0 +1,8 @@
### Reverse a string
Use array destructuring and `Array.reverse()` to reverse the order of the characters in the string.
Combine characters to get a string using `join('')`.
```js
const reverseString = str => [...str].reverse().join('');
```

View File

@ -1,11 +1,11 @@
### Scroll to top
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.
Scroll by a fraction of the distance from top. Use `window.requestAnimationFrame()` to animate the scrolling.
```js
var scrollToTop = _ => {
var c = document.documentElement.scrollTop || document.body.scrollTop;
const scrollToTop = _ => {
const c = document.documentElement.scrollTop || document.body.scrollTop;
if(c > 0) {
window.requestAnimationFrame(scrollToTop);
window.scrollTo(0, c - c/8);

View File

@ -1,8 +1,7 @@
### Similarity between arrays
Use `filter()` to remove values that are not part of `values`, determined using `indexOf()`.
Use `filter()` to remove values that are not part of `values`, determined using `includes()`.
```js
var difference = (arr, values) =>
arr.filter(v => values.indexOf(v) !== -1);
const difference = (arr, values) => arr.filter(v => values.includes(v));
```

View File

@ -3,6 +3,6 @@
Split the string using `split('')`, `sort()` utilizing `localeCompare()`, recombine using `join('')`.
```js
var sortCharactersInString = str =>
const sortCharactersInString = str =>
str.split('').sort( (a,b) => a.localeCompare(b) ).join('');
```

View File

@ -3,6 +3,6 @@
Use `reduce()` to add each value to an accumulator, initialized with a value of `0`.
```js
var sum = arr =>
const sum = arr =>
arr.reduce( (acc , val) => acc + val, 0);
```

View File

@ -3,5 +3,5 @@
Return `arr.slice(1)`.
```js
var tail = arr => arr.slice(1);
const tail = arr => arr.slice(1);
```

View File

@ -1,13 +1,8 @@
### Unique values of array
Use `reduce()` to accumulate all unique values in an array.
Check if each value has already been added, using `indexOf()` on the accumulator array.
Use ES6 `Set` and the `...rest` operator to discard all duplicated values.
```js
var uniqueValues = arr =>
arr.reduce( (acc, val) => {
if(acc.indexOf(val) === -1)
acc.push(val);
return acc;
}, []);
const unique = arr => [...new Set(arr)];
// unique([1,2,2,3,4,4,5]) -> [1,2,3,4,5]
```

View File

@ -4,5 +4,5 @@ Use `!isNaN` in combination with `parseFloat()` to check if the argument is a nu
Use `isFinite()` to check if the number is finite.
```js
var validateNumber = n => !isNaN(parseFloat(n)) && isFinite(n);
const validateNumber = n => !isNaN(parseFloat(n)) && isFinite(n);
```