diff --git a/README.md b/README.md index cad3dbcba..3480f7f8e 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ * [Count occurrences of a value in array](#count-occurrences-of-a-value-in-array) * [Current URL](#current-url) * [Curry](#curry) +* [Deep flatten array](#deep-flatten-array) * [Difference between arrays](#difference-between-arrays) * [Distance between two points](#distance-between-two-points) * [Divisible by number](#divisible-by-number) @@ -115,7 +116,7 @@ const palindrome = str => 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); +const countOccurrences = (arr, value) => arr.reduce((a, v) => v === value ? a + 1 : a + 0, 0); // countOccurrences([1,1,2,1,2,3], 1) -> 3 ``` @@ -141,6 +142,17 @@ const curry = f => // curry(Math.pow)(2)(10) -> 1024 ``` +### Deep flatten array + +Use recursion. +Use `reduce()` to get all elements that are not arrays, flatten each element that is an array. + +```js +const deepFlatten = arr => + arr.reduce( (a, v) => a.concat( Array.isArray(v) ? flatten(v) : v ), []); +// deepFlatten([1,[2],[[3],4],5]) -> [1,2,3,4,5] +``` + ### Difference between arrays Use `filter()` to remove values that are part of `values`, determined using `includes()`. @@ -173,8 +185,7 @@ const isDivisible = (dividend, divisor) => dividend % divisor === 0; Use `replace()` to escape special characters. ```js -const escapeRegExp = s => - s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); +const escapeRegExp = str => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // escapeRegExp('(test)') -> \\(test\\) ``` @@ -225,13 +236,11 @@ const unique = arr => arr.filter(i => arr.indexOf(i) === arr.lastIndexOf(i)); ### Flatten array -Use recursion. -Use `reduce()` to get all elements that are not arrays, flatten each element that is an array. +Use `reduce()` to get all elements inside the array and `concat()` to flatten them. ```js -const flatten = arr => - arr.reduce( (a, v) => a.concat( Array.isArray(v) ? flatten(v) : v ), []); -// flatten([1,[2],[[3],4],5]) -> [1,2,3,4,5] +const flatten = arr => arr.reduce( (a, v) => a.concat(v), []); +// flatten([1,[2],3,4) -> [1,2,3,4] ``` ## Get scroll position diff --git a/snippets/count-occurrences-of-a-value-in-array.md b/snippets/count-occurrences-of-a-value-in-array.md index 552ad9f39..89e3b5b6d 100644 --- a/snippets/count-occurrences-of-a-value-in-array.md +++ b/snippets/count-occurrences-of-a-value-in-array.md @@ -3,6 +3,6 @@ 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); +const countOccurrences = (arr, value) => arr.reduce((a, v) => v === value ? a + 1 : a + 0, 0); // countOccurrences([1,1,2,1,2,3], 1) -> 3 ``` diff --git a/snippets/deep-flatten-array.md b/snippets/deep-flatten-array.md new file mode 100644 index 000000000..545c4c8d4 --- /dev/null +++ b/snippets/deep-flatten-array.md @@ -0,0 +1,10 @@ +### Deep flatten array + +Use recursion. +Use `reduce()` to get all elements that are not arrays, flatten each element that is an array. + +```js +const deepFlatten = arr => + arr.reduce( (a, v) => a.concat( Array.isArray(v) ? flatten(v) : v ), []); +// deepFlatten([1,[2],[[3],4],5]) -> [1,2,3,4,5] +``` diff --git a/snippets/escape-regular-expression.md b/snippets/escape-regular-expression.md index 4bd77a0d9..fb204a451 100644 --- a/snippets/escape-regular-expression.md +++ b/snippets/escape-regular-expression.md @@ -3,7 +3,6 @@ Use `replace()` to escape special characters. ```js -const escapeRegExp = s => - s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); +const escapeRegExp = str => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // escapeRegExp('(test)') -> \\(test\\) ``` diff --git a/snippets/flatten-array.md b/snippets/flatten-array.md index f3b1c9f4b..c4afd4847 100644 --- a/snippets/flatten-array.md +++ b/snippets/flatten-array.md @@ -1,10 +1,8 @@ ### Flatten array -Use recursion. -Use `reduce()` to get all elements that are not arrays, flatten each element that is an array. +Use `reduce()` to get all elements inside the array and `concat()` to flatten them. ```js -const flatten = arr => - arr.reduce( (a, v) => a.concat( Array.isArray(v) ? flatten(v) : v ), []); -// flatten([1,[2],[[3],4],5]) -> [1,2,3,4,5] +const flatten = arr => arr.reduce( (a, v) => a.concat(v), []); +// flatten([1,[2],3,4) -> [1,2,3,4] ```