[英]Truncating a string in Javascript, confusion of last two test strings
我正在为 freecodecamp 做一个项目。
项目规则:
如果字符串长于给定的最大字符串长度(第二个参数),则截断字符串(第一个参数)。 返回以 ... 结尾的截断字符串。
请注意,将三个点插入到末尾会增加字符串长度。
但是,如果给定的最大字符串长度 num 小于或等于 3,那么在确定被截断的字符串时,三个点的相加不会增加字符串长度。
我的测试字符串包括:
truncateString("A-tisket a-tasket A green and yellow basket", 11)
应该返回 "A-tisket..."。
truncateString("Peter Piper picked a peck of pickled peppers", 14)
应该返回 "Peter Piper..."。
truncateString("A-tisket a-tasket A green and yellow basket", "A-tisket a-tasket A green and yellow basket".length)
应该返回“A-tisket a-tasket A green and Yellow bag”。
truncateString("A-tisket a-tasket A green and yellow basket", "A-tisket a-tasket A green and yellow basket".length + 2)
应该返回“A-tisket a-tasket A green and Yellow bag”。
truncateString("A-", 1)
应该返回 "A..."。
truncateString("Absolutely Longer", 2)
应该返回"Ab..."。
现在我已经使用ternary
运算符解决了大部分问题,所以它相当简单,除了最后两个('A-', 1)
和('Absolutely Longer', 2)
,我的问题是,我该如何完成截断成功并返回最后两个字符串的预期输出?
来源:
function truncateString(str, num) {
return str.length > num ? str.slice(0, num - 3) + '...' : str;
}
您需要处理num
小于或等于 3 的情况。您可以添加另一个条件来执行此操作:
function truncateString(str, num) { return str.length > num ? str.slice(0, num >= 3 ? num - 3 : num) + '...' : str; } console.log(truncateString("A-tisket a-tasket A green and yellow basket", 11)); console.log(truncateString("Peter Piper picked a peck of pickled peppers", 14)); console.log(truncateString("A-tisket a-tasket A green and yellow basket", "A-tisket a-tasket A green and yellow basket".length)); console.log(truncateString("A-tisket a-tasket A green and yellow basket", "A-tisket a-tasket A green and yellow basket".length + 2)); console.log(truncateString("A-", 1)); console.log(truncateString("Absolutely Longer", 2));
我注意到该任务在 2018 年略有变化:如果字符串长于给定的最大字符串长度(第二个参数),则截断它(第一个参数)。 返回以 ... 结尾的截断字符串。
解决方案是:
function truncateString(str, num) { // Clear out that junk in your trunk if (str.length > num) { return str.slice(0, num) + '...'; } else { return str; } } truncateString("A-tisket a-tasket A green and yellow basket", 8);
解释:首先我们检查字符串中的字母数是否大于给定的数字。 如果是这样,我们将字符串的第一部分剪掉并添加“...”。 我们从第一个字母 (0) 开始删除给定数量的字母。
像这样的东西:
function truncateString(str, num) {
var result = str;
if(str.length - 3 > num) {
result = str.length > num ? str.slice(0, num - 3) + '...' : str;
}
return result;
}
truncateString("A-", 1)
// "A-"
truncateString("A-tisket a-tasket A green and yellow basket", 11)
// "A-tisket..."
这会有所帮助。 不完美但可以工作,应该很容易让初学者理解
function truncateString(str, num) {
var res = "";
if (str.length > num) {
if (num > 3) {
res = str.slice(0, num - 3) + "...";
} else {
res = str.slice(0, num) + "...";
}
return res;
}
return str;
}
truncateString("A-tisket a-tasket A green and yellow basket", 11);
我对这个问题的简短解决方案。
const truncateString = (str, num) => str.length > num ?
str.substr(0, num) + "..." :
str;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.