截断 Javascript 中的字符串(有约束)

Truncating a String in Javascript (with constraints)

我正在应对来自 freecodecamp https://www.freecodecamp.com/challenges/truncate-a-string 的编码挑战。

要完成此代码,我的代码必须满足以下 3 个条件:

  1. 如果字符串(第一个参数)比给定的最大字符串长度(第二个参数)长,则截断该字符串(第一个参数)。 Return 以 ... 结尾的截断字符串。

  2. 末尾插入的三个点也应该加上字符串长度

  3. 但是如果给定的最大字符串长度小于或等于3,则在确定截断字符串时添加三个点不会增加字符串长度。

我能够满足前两个条件,但出于某种原因,当我给出一个字符串长度小于或等于 3 的测试用例时,我的代码会抛出一个错误...

示例: truncateString("Absolutely Longer", 2) 应该 return "Ab..." 而不是 returns "Absolutely Longe..."

请帮忙。我的代码在 https://gist.github.com/adityatejas/7857c0866f67783e71a1c9d60d3beed8.

function truncateString(str, num)
{
  var truncatedStr = '';
  if (str.length > num)
  {
    truncatedStr = str.slice(0, num-3) + "...";
    return truncatedStr;    
  }
  else if (num <= 3)
  {
    truncatedStr = str.slice(0, num) + "...";
    return truncatedStr;
  }
  else return str;
}

truncateString("Adi", 1);

您想创建一个接受两个参数的函数,一个您选择的字符串和一个最大长度。根据条件,我们需要三个场景。

  1. 当给定的字符串超过最大值且最大值小于等于3时,这种情况下,字符串末尾不加省略号。我们从第一个字符(位置零)开始截取字符串的一部分,直到比最大值少三个,然后添加省略号。

  2. 当给定的字符串超过最大值并且最大值大于3时。在这种情况下,我们的字符串自然会变长。我们更新切片参数,从第一个索引到字符串的长度,并在其上添加省略号。

  3. 否则,只return原样的字符串,因为它没有超过最大长度。

var truncatedString = document.getElementById("truncated-string");

function truncateString(myString, strLength) {
    if (myString.length > strLength) {
        if (strLength <= 3) {
            return myString.slice(0, strLength - 3) + "...";
        }
        else {
            return myString.slice(0, strLength) + "...";
        }
    }
    else {
        return myString;
    }
    
}

var userInput = prompt("Please enter a string");
var lengthLimit = prompt("Enter a maximum length");

truncatedString.innerHTML = truncateString(userInput, lengthLimit);
<p id="truncated-string"></p>

您可以使用 conditional (ternary) operator ?: and String#slice

function truncateString(str, num) {
    return str.length > num ?
        str.slice(0, num > 3 ? num - 3 : num) + "..." :
        str;
}

console.log(truncateString("Abcdefghijk", 5));
console.log(truncateString("A-", 1));
console.log(truncateString("Alpha", 5));
console.log(truncateString("Beta", 5));
console.log(truncateString("Epsilon", 3));

这是一个简单的解决方案:

function truncateString(str, num) {
if (str.length > num) {
return str.slice(0, num) + "...";}
else {
return str;}}