From 6eb818309e3a0a7c8faada1a4dbbe95a13b49627 Mon Sep 17 00:00:00 2001 From: Angelos Chalaris Date: Sat, 16 Dec 2017 13:56:55 +0200 Subject: [PATCH] Housekeeping, tag and build --- README.md | 89 ++++++++++++++++--- ... => 3-digit-hexcode-to-6-digit-hexcode.md} | 8 +- snippets/initialize-array-with-range.md | 2 +- snippets/{pipe.md => pipe-functions.md} | 2 +- ...rray.md => read-file-as-array-of-lines.md} | 4 +- snippets/take-every-nth-element.md | 2 +- tag_database | 8 +- 7 files changed, 92 insertions(+), 23 deletions(-) rename snippets/{3DigHexcode-to-6DigHexcode.md => 3-digit-hexcode-to-6-digit-hexcode.md} (73%) rename snippets/{pipe.md => pipe-functions.md} (95%) rename snippets/{read-file-to-array.md => read-file-as-array-of-lines.md} (93%) diff --git a/README.md b/README.md index 76e9af825..b40db071e 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ * [Similarity between arrays](#similarity-between-arrays) * [Sum of array of numbers](#sum-of-array-of-numbers) * [Tail of list](#tail-of-list) +* [Take every nth element](#take-every-nth-element) * [Take right](#take-right) * [Take](#take) * [Unique values of array](#unique-values-of-array) @@ -61,8 +62,9 @@ ### Function * [Chain asynchronous functions](#chain-asynchronous-functions) +* [Compose functions](#compose-functions) * [Curry](#curry) -* [Pipe](#pipe) +* [Pipe functions](#pipe-functions) * [Promisify](#promisify) * [Run promises in series](#run-promises-in-series) * [Sleep](#sleep) @@ -85,6 +87,7 @@ * [Speech synthesis (experimental)](#speech-synthesis-experimental) ### Node +* [Read file as array of lines](#read-file-as-array-of-lines) * [Write JSON to file](#write-json-to-file) ### Object @@ -102,6 +105,7 @@ * [Truncate a string](#truncate-a-string) ### Utility +* [3 digit hexcode to 6 digit hexcode](#3-digit-hexcode-to-6-digit-hexcode) * [Escape regular expression](#escape-regular-expression) * [Get native type of value](#get-native-type-of-value) * [Hexcode to RGB](#hexcode-to-rgb) @@ -128,11 +132,11 @@ ### Array concatenation -Use `Array.concat()` to concatenate an array with any additional arrays and/or values, specified in `args`. +Use Array spread operators (`...`) to concatenate an array with any additional arrays and/or values, specified in `args`. ```js -const ArrayConcat = (arr, ...args) => [].concat(arr, ...args); -// ArrayConcat([1], [1, 2, 3, [4]]) -> [1, 2, 3, [4]] +const ArrayConcat = (arr, ...args) => [...arr,...args]; +// ArrayConcat([1], [1, 2, 3, [4]]) -> [1, 1, 2, 3, [4]] ``` [⬆ back to top](#table-of-contents) @@ -213,11 +217,11 @@ const union = (a, b) => Array.from(new Set([...a, ...b])); ### Array without -Use `Array.filter()` to create an array excluding all given values. +Use `Array.filter()` to create an array excluding(using `!Array.includes()`) all given values. ```js -const without = (arr, ...args) => arr.filter(v => args.indexOf(v) === -1); -// without[2, 1, 2, 3], 1, 2) -> [3] +const without = (arr, ...args) => arr.filter(v => !args.includes(v)); +// without([2, 1, 2, 3], 1, 2) -> [3] // without([2, 1, 2, 3, 4, 5, 5, 5, 3, 2, 7, 7], 3, 1, 5, 2) -> [ 4, 7, 7 ] ``` @@ -231,7 +235,7 @@ If lengths of the argument-arrays vary, `undefined` is used where no value could ```js const zip = (...arrays) => { - const maxLength = Math.max.apply(null, arrays.map(a => a.length)); + const maxLength = Math.max(...arrays.map(x => x.length)); return Array.from({length: maxLength}).map((_, i) => { return Array.from({length: arrays.length}, (_, k) => arrays[k][i]); }) @@ -434,7 +438,7 @@ You can omit `start` to use a default value of `0`. ```js const initializeArrayRange = (end, start = 0) => - Array.apply(null, Array(end - start)).map((v, i) => i + start); + Array.from({ length: end - start }).map((v, i) => i + start); // initializeArrayRange(5) -> [0,1,2,3,4] ``` @@ -551,6 +555,17 @@ const tail = arr => arr.length > 1 ? arr.slice(1) : arr; [⬆ back to top](#table-of-contents) +### Take every nth element + +Use `Array.filter()` to create a new array that contains every nth element of a given array. + +```js +const everynth = (arr, nth) => arr.filter((e, i) => i % nth === 0); +// everynth([1,2,3,4,5,6], 2) -> [ 1, 3, 5 ] +``` + +[⬆ back to top](#table-of-contents) + ### Take right Use `Array.slice()` to create a slice of the array with `n` elements taken from the end. @@ -707,6 +722,22 @@ chainAsync([ [⬆ back to top](#table-of-contents) +### Compose functions + +Use `Array.reduce()` to perform right-to-left function composition. +The last (rightmost) function can accept one or more arguments; the remaining functions must be unary. + +```js +const compose = (...fns) => fns.reduce((f, g) => (...args) => f(g(...args))); +/* +const add5 = x => x + 5 +const multiply = (x, y) => x * y +const multiplyAndAdd5 = compose(add5, multiply) +multiplyAndAdd5(5, 2) -> 15 +*/ +``` +[⬆ back to top](#table-of-contents) + ### Curry Use recursion. @@ -725,9 +756,9 @@ const curry = (fn, arity = fn.length, ...args) => [⬆ back to top](#table-of-contents) -### Pipe +### Pipe functions -Use `Array.reduce()` to perform left-to-right function composition. +Use `Array.reduce()` with the spread operator (`...`) to perform left-to-right function composition. The first (leftmost) function can accept one or more arguments; the remaining functions must be unary. ```js @@ -967,6 +998,28 @@ const speak = message => { [⬆ back to top](#table-of-contents) ## Node +### Read file as array of lines + +Use `readFileSync` function in `fs` node package to create a `Buffer` from a file. +convert buffer to string using `toString(encoding)` function. +creating an array from contents of file by `split`ing file content line by line(each `\n`). + + ```js +const fs = require('fs'); +const readFileToArray = filename => fs.readFileSync(filename).toString('UTF8').split('\n'); +/* + contents of test.txt : + line1 + line2 + line3 + ___________________________ + let arr = readFileToArray('test.txt') + console.log(arr) // -> ['line1', 'line2', 'line3'] + */ +``` + +[⬆ back to top](#table-of-contents) + ### Write JSON to file Use `fs.writeFile()`, template literals and `JSON.stringify()` to write a `json` object to a `.json` file. @@ -1114,6 +1167,20 @@ const truncate = (str, num) => [⬆ back to top](#table-of-contents) ## Utility +### 3-digit hexcode to 6-digit hexcode + +Use `Array.map()`, `split()` and `Array.join()` to join the mapped array for converting a three-digit RGB notated hexadecimal colorcode to the six-digit form. + +```js +const convertHex = shortHex => + shortHex[0] == '#' ? ('#' + shortHex.slice(1).split('').map(x => x+x).join('')) : + ('#' + shortHex.split('').map(x => x+x).join('')); +// convertHex('#03f') -> '#0033ff' +// convertHex('05a') -> '#0055aa' +``` + +[⬆ back to top](#table-of-contents) + ### Escape regular expression Use `replace()` to escape special characters. diff --git a/snippets/3DigHexcode-to-6DigHexcode.md b/snippets/3-digit-hexcode-to-6-digit-hexcode.md similarity index 73% rename from snippets/3DigHexcode-to-6DigHexcode.md rename to snippets/3-digit-hexcode-to-6-digit-hexcode.md index 2e9b9b8fc..a138b34bb 100644 --- a/snippets/3DigHexcode-to-6DigHexcode.md +++ b/snippets/3-digit-hexcode-to-6-digit-hexcode.md @@ -1,10 +1,10 @@ -### 3DigHexcode to 6DigHexcode +### 3-digit hexcode to 6-digit hexcode -Use `Array.map()`, `split()` and `Array.join()` to join the mapped array for converting a three-digit RGB notated hexadecimal colorcode to the six-digit form. +Use `Array.map()`, `split()` and `Array.join()` to join the mapped array for converting a three-digit RGB notated hexadecimal colorcode to the six-digit form. ```js -const convertHex = shortHex => - shortHex[0] == '#' ? ('#' + shortHex.slice(1).split('').map(x => x+x).join('')) : +const convertHex = shortHex => + shortHex[0] == '#' ? ('#' + shortHex.slice(1).split('').map(x => x+x).join('')) : ('#' + shortHex.split('').map(x => x+x).join('')); // convertHex('#03f') -> '#0033ff' // convertHex('05a') -> '#0055aa' diff --git a/snippets/initialize-array-with-range.md b/snippets/initialize-array-with-range.md index a601ddbb1..082325699 100644 --- a/snippets/initialize-array-with-range.md +++ b/snippets/initialize-array-with-range.md @@ -5,6 +5,6 @@ You can omit `start` to use a default value of `0`. ```js const initializeArrayRange = (end, start = 0) => - Array.from({ length: end - start }).map((v, i) => i + start) + Array.from({ length: end - start }).map((v, i) => i + start); // initializeArrayRange(5) -> [0,1,2,3,4] ``` diff --git a/snippets/pipe.md b/snippets/pipe-functions.md similarity index 95% rename from snippets/pipe.md rename to snippets/pipe-functions.md index 434b4c0c3..6e34e1063 100644 --- a/snippets/pipe.md +++ b/snippets/pipe-functions.md @@ -1,4 +1,4 @@ -### Pipe +### Pipe functions Use `Array.reduce()` with the spread operator (`...`) to perform left-to-right function composition. The first (leftmost) function can accept one or more arguments; the remaining functions must be unary. diff --git a/snippets/read-file-to-array.md b/snippets/read-file-as-array-of-lines.md similarity index 93% rename from snippets/read-file-to-array.md rename to snippets/read-file-as-array-of-lines.md index 451e2dd06..c64b61c6f 100644 --- a/snippets/read-file-to-array.md +++ b/snippets/read-file-as-array-of-lines.md @@ -1,4 +1,4 @@ -### Read a file to an Array +### Read file as array of lines Use `readFileSync` function in `fs` node package to create a `Buffer` from a file. convert buffer to string using `toString(encoding)` function. @@ -16,4 +16,4 @@ const readFileToArray = filename => fs.readFileSync(filename).toString('UTF8').s let arr = readFileToArray('test.txt') console.log(arr) // -> ['line1', 'line2', 'line3'] */ -``` \ No newline at end of file +``` diff --git a/snippets/take-every-nth-element.md b/snippets/take-every-nth-element.md index 639fb0e6c..8db496353 100644 --- a/snippets/take-every-nth-element.md +++ b/snippets/take-every-nth-element.md @@ -1,4 +1,4 @@ -### Take every nth element of an array +### Take every nth element Use `Array.filter()` to create a new array that contains every nth element of a given array. diff --git a/tag_database b/tag_database index 34efb5b8c..0e529695e 100644 --- a/tag_database +++ b/tag_database @@ -1,3 +1,4 @@ +3-digit-hexcode-to-6-digit-hexcode:utility anagrams-of-string-(with-duplicates):string array-concatenation:array array-difference:array @@ -17,6 +18,7 @@ check-for-palindrome:string chunk-array:array collatz-algorithm:math compact:array +compose-functions:function count-occurrences-of-a-value-in-array:array current-URL:browser curry:function @@ -62,12 +64,12 @@ object-to-key-value-pairs:object ordinal-suffix-of-number:utility percentile:math pick:array -pipe:function +pipe-functions:function powerset:math promisify:function random-integer-in-range:utility random-number-in-range:utility -read-file-to-array:node +read-file-as-array-of-lines:node redirect-to-URL:browser reverse-a-string:string RGB-to-hexadecimal:utility @@ -84,9 +86,9 @@ standard-deviation:math sum-of-array-of-numbers:array swap-values-of-two-variables:utility tail-of-list:array +take-every-nth-element:array take-right:array take:array -take-every-nth-element:array truncate-a-string:string unique-values-of-array:array URL-parameters:utility