Bunun gibi basit bir problem için okunması zor çok sayıda cevap olmasına ve seçilen cevap dahil bazılarının çalışmamasına şaşırdım.
Genellikle sonuç dizesinin en fazla maxLen
karakter olmasını isterim . URL'lerdeki sümüklü böcekleri kısaltmak için de aynı işlevi kullanıyorum.
str.lastIndexOf(searchValue[, fromIndex])
dizede geriye doğru aramaya başlanacak dizin olan ikinci bir parametre alır ve işleri verimli ve basit hale getirir.
function shorten(str, maxLen, separator = ' ') {
if (str.length <= maxLen) return str;
return str.substr(0, str.lastIndexOf(separator, maxLen));
}
Bu bir örnek çıktı:
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"
Ve sümüklüböcek için:
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()