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...' +```