繁体   English   中英

在 Javascript 中截断字符串,混淆最后两个测试字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM