From aab1acb7f534dbff3fed4a6d4a19ec1dfd31494a Mon Sep 17 00:00:00 2001 From: Angelos Chalaris Date: Mon, 19 Oct 2020 11:11:16 +0300 Subject: [PATCH] Update and rename truncateAtSpace.md to truncateStringAtWhitespace.md --- snippets/truncateAtSpace.md | 21 --------------------- snippets/truncateStringAtWhitespace.md | 26 ++++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 21 deletions(-) delete mode 100644 snippets/truncateAtSpace.md create mode 100644 snippets/truncateStringAtWhitespace.md diff --git a/snippets/truncateAtSpace.md b/snippets/truncateAtSpace.md deleted file mode 100644 index bd83c7539..000000000 --- a/snippets/truncateAtSpace.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: truncateAtSpace -tags: string,beginner ---- - -Truncates a string up to the nearest space before a specified length. - -- Checks if there string can be truncated -- Calculates the nearest space before or at the strings set limit. -- Appends a configurable ending (defaulting to `'...'`) to the truncated string. - -```js -const truncateAtSpace = (string, characterLimit, ending = '...') => { - const lastSpace = string.slice(0, characterLimit + 1).lastIndexOf(' '); - return (string.length <= characterLimit) ? string : (lastSpace > 0) ? string.slice(0, lastSpace) + ending : ending; -} -``` - -```js -truncateAtSpace('This is a long excerpt that is far too long.', 25, '...'); // This is a long excerpt... -``` diff --git a/snippets/truncateStringAtWhitespace.md b/snippets/truncateStringAtWhitespace.md new file mode 100644 index 000000000..16018075e --- /dev/null +++ b/snippets/truncateStringAtWhitespace.md @@ -0,0 +1,26 @@ +--- +title: truncateStringAtWhitespace +tags: string,intermediate +--- + +Truncates a string up to specified length, respecting whitespace when possible. + +- Determine if the string's `length` is greater or equal to `lim`. If not, return it as-is. +- Use `String.prototype.slice()` and `String.prototype.lastIndexOf()` to find the index of the last space below the desired `lim`. +- Use `String.prototype.slice()` to appropriately truncate `str` based on `lastSpace`, respecting whitespace if possible and appending `ending` at the end. +- Omit the third argument, `ending`, to use the default ending of `'...'`. + +```js +const truncateStringAtWhitespace = (str, lim, ending = '...') => { + if (str.length <= lim) return str; + const lastSpace = str.slice(0, lim - ending.length + 1).lastIndexOf(' '); + return str.slice(0, lastSpace > 0 ? lastSpace : lim - ending.length) + ending; +}; +``` + +```js +truncateStringAtWhitespace('short', 10); // 'short' +truncateStringAtWhitespace('not so short', 10); // 'not so...' +truncateStringAtWhitespace('trying a thing', 10); // 'trying...' +truncateStringAtWhitespace('javascripting', 10); // 'javascr...' +```