Ich bin ein bisschen überrascht, dass es für ein einfaches Problem wie dieses so viele Antworten gibt, die schwer zu lesen sind und einige, einschließlich der ausgewählten, nicht funktionieren.
Normalerweise möchte ich, dass die Ergebniszeichenfolge höchstens aus maxLen
Zeichen besteht. Ich benutze dieselbe Funktion auch, um die Slugs in URLs zu verkürzen.
str.lastIndexOf(searchValue[, fromIndex])
Nimmt einen zweiten Parameter, der der Index ist, an dem die Suche in der Zeichenfolge rückwärts gestartet wird, um die Dinge effizient und einfach zu gestalten.
// Shorten a string to less than maxLen characters without truncating words.
function shorten(str, maxLen, separator = ' ') {
if (str.length <= maxLen) return str;
return str.substr(0, str.lastIndexOf(separator, maxLen));
}
Dies ist eine Beispielausgabe:
for (var i = 0; i < 50; i += 3)
console.log(i, shorten("The quick brown fox jumps over the lazy dog", i));
0 ""
3 "The"
6 "The"
9 "The quick"
12 "The quick"
15 "The quick brown"
18 "The quick brown"
21 "The quick brown fox"
24 "The quick brown fox"
27 "The quick brown fox jumps"
30 "The quick brown fox jumps over"
33 "The quick brown fox jumps over"
36 "The quick brown fox jumps over the"
39 "The quick brown fox jumps over the lazy"
42 "The quick brown fox jumps over the lazy"
45 "The quick brown fox jumps over the lazy dog"
48 "The quick brown fox jumps over the lazy dog"
Und für die Schnecke:
for (var i = 0; i < 50; i += 10)
console.log(i, shorten("the-quick-brown-fox-jumps-over-the-lazy-dog", i, '-'));
0 ""
10 "the-quick"
20 "the-quick-brown-fox"
30 "the-quick-brown-fox-jumps-over"
40 "the-quick-brown-fox-jumps-over-the-lazy"
" too many spaces ".trim()