diff --git a/README.md b/README.md index ca81c3a3a..db686662f 100644 --- a/README.md +++ b/README.md @@ -278,6 +278,15 @@ +### _Uncategorized_ + +
+View contents + +* [`prettyBytes`](#prettybytes) + +
+ --- ## 🔌 Adapter @@ -4941,6 +4950,40 @@ yesNo('Foo', true); // true
[⬆ Back to top](#table-of-contents) +--- + ## _Uncategorized_ + +### prettyBytes + +Converts a number in bytes to a human-readable string. + +Use an array dictionary of units to be accessed based on the exponent. +Use `Number.toPrecision()` to truncate the number to a certain number of digits. +Return the prettified string by building it up, taking into account the supplied options and whether it is negative or not. +Omit the second argument, `precision`, to use a default precision of `3` digits. +Omit the third argument, `addSpace`, to add space between the number and unit by default. + +```js +const prettyBytes = (num, precision = 3, addSpace = true) => { + const UNITS = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + if (Math.abs(num) < 1) return num + (addSpace ? ' ' : '') + UNITS[0]; + const exponent = Math.min(Math.floor(Math.log10(num < 0 ? -num : num) / 3), UNITS.length - 1); + const n = Number(((num < 0 ? -num : num) / 1000 ** exponent).toPrecision(precision)); + return (num < 0 ? '-' : '') + n + (addSpace ? ' ' : '') + UNITS[exponent]; +}; +``` + +```js +prettyBytes(1000); // 1 KB +prettyBytes(123456789); // 123 MB +prettyBytes(-50); // -50 B +prettyBytes(27145424323.5821); // 27.1 GB +prettyBytes(27145424323.5821, 5); // 27.145 GB +prettyBytes(5500, 3, false); // 5.5KB +``` + +
[⬆ back to top](#table-of-contents) + ## Collaborators diff --git a/docs/index.html b/docs/index.html index c6f4facbb..ad87258f0 100644 --- a/docs/index.html +++ b/docs/index.html @@ -59,7 +59,7 @@ wrapper.appendChild(box); box.appendChild(el); }); - }

 30 seconds of code Curated collection of useful JavaScript snippets that you can understand in 30 seconds or less.

 

Adapter

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);
+    }

 30 seconds of code Curated collection of useful JavaScript snippets that you can understand in 30 seconds or less.

 

Adapter

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);
 
Promise.resolve([1, 2, 3])
   .then(call('map', x => 2 * x))
   .then(console.log); //[ 2, 4, 6 ]
@@ -1081,4 +1081,17 @@ console.log(sdbm('age')); // 808122783
 yesNo('yes'); // true
 yesNo('No'); // false
 yesNo('Foo', true); // true
+

Uncategorized

prettyBytes

Converts a number in bytes to a human-readable string.

Use an array dictionary of units to be accessed based on the exponent. Use Number.toPrecision() to truncate the number to a certain number of digits. Return the prettified string by building it up, taking into account the supplied options and whether it is negative or not. Omit the second argument, precision, to use a default precision of 3 digits. Omit the third argument, addSpace, to add space between the number and unit by default.

const prettyBytes = (num, precision = 3, addSpace = true) => {
+  const UNITS = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
+  if (Math.abs(num) < 1) return num + (addSpace ? ' ' : '') + UNITS[0];
+  const exponent = Math.min(Math.floor(Math.log10(num < 0 ? -num : num) / 3), UNITS.length - 1);
+  const n = Number(((num < 0 ? -num : num) / 1000 ** exponent).toPrecision(precision));
+  return (num < 0 ? '-' : '') + n + (addSpace ? ' ' : '') + UNITS[exponent];
+};
+
prettyBytes(1000); // 1 KB
+prettyBytes(123456789); // 123 MB
+prettyBytes(-50); // -50 B
+prettyBytes(27145424323.5821); // 27.1 GB
+prettyBytes(27145424323.5821, 5); // 27.145 GB
+prettyBytes(5500, 3, false); // 5.5KB
 

\ No newline at end of file diff --git a/snippets/prettyBytes.md b/snippets/prettyBytes.md index 290c493f8..23a9fdf3d 100644 --- a/snippets/prettyBytes.md +++ b/snippets/prettyBytes.md @@ -9,12 +9,12 @@ Omit the second argument, `precision`, to use a default precision of `3` digits. Omit the third argument, `addSpace`, to add space between the number and unit by default. ```js -const prettyBytes = (num, precision = 3, addSpace = true) => { - const UNITS = ['B','KB','MB','GB','TB','PB','EB','ZB','YB']; +const prettyBytes = (num, precision = 3, addSpace = true) => { + const UNITS = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; if (Math.abs(num) < 1) return num + (addSpace ? ' ' : '') + UNITS[0]; const exponent = Math.min(Math.floor(Math.log10(num < 0 ? -num : num) / 3), UNITS.length - 1); const n = Number(((num < 0 ? -num : num) / 1000 ** exponent).toPrecision(precision)); - return ((num < 0 ? '-' : '') + n + (addSpace ? ' ' : '') + UNITS[exponent]); + return (num < 0 ? '-' : '') + n + (addSpace ? ' ' : '') + UNITS[exponent]; }; ``` @@ -23,6 +23,6 @@ prettyBytes(1000); // 1 KB prettyBytes(123456789); // 123 MB prettyBytes(-50); // -50 B prettyBytes(27145424323.5821); // 27.1 GB -prettyBytes(27145424323.5821, 5 ); // 27.145 GB +prettyBytes(27145424323.5821, 5); // 27.145 GB prettyBytes(5500, 3, false); // 5.5KB ``` diff --git a/tag_database b/tag_database index 7b9178af1..321fde65d 100644 --- a/tag_database +++ b/tag_database @@ -108,6 +108,7 @@ percentile:math pick:array pipeFunctions:adapter powerset:math +prettyBytes:uncategorized primes:math promisify:adapter pull:array