Tôi hơi ngạc nhiên là đối với một bài toán đơn giản như thế này có rất nhiều câu trả lời rất khó đọc và một số, bao gồm cả câu đã chọn, không hoạt động.
Tôi thường muốn chuỗi kết quả có nhiều nhất là maxLen
ký tự. Tôi cũng sử dụng chức năng tương tự này để rút ngắn các slugs trong URL.
str.lastIndexOf(searchValue[, fromIndex])
nhận tham số thứ hai là chỉ mục để bắt đầu tìm kiếm ngược trong chuỗi làm cho mọi thứ trở nên hiệu quả và đơn giản.
// 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));
}
Đây là đầu ra mẫu:
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"
Và đối với sên:
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()