ฉันรู้สึกแปลกใจที่สำหรับปัญหาง่ายๆเช่นนี้มีคำตอบมากมายที่อ่านยากและบางคำรวมถึงข้อที่เลือกก็ใช้ไม่ได้
โดยปกติฉันต้องการให้สตริงผลลัพธ์มีอักขระไม่เกิน maxLen
ตัว ฉันยังใช้ฟังก์ชันเดียวกันนี้เพื่อย่อทากใน URL
str.lastIndexOf(searchValue[, fromIndex])
รับพารามิเตอร์ที่สองซึ่งเป็นดัชนีที่จะเริ่มค้นหาย้อนหลังในสตริงทำให้สิ่งต่างๆมีประสิทธิภาพและเรียบง่าย
function shorten(str, maxLen, separator = ' ') {
if (str.length <= maxLen) return str;
return str.substr(0, str.lastIndexOf(separator, maxLen));
}
นี่คือผลลัพธ์ตัวอย่าง:
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"
และสำหรับทาก:
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()