在Javascript中截断字符串(带约束)

时间:2016-06-20 16:10:03

标签: javascript string truncation

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

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

  1. 如果字符串(第一个参数)长于给定的最大字符串长度(第二个参数),则截断该字符串。返回带有...结尾的截断字符串。

  2. 末尾插入的三个点也应添加到字符串长度。

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

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

    实施例: truncateString("绝对更长",2)应返回" Ab ..."但是返回" 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);

3 个答案:

答案 0 :(得分:0)

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

  1. 当给定的字符串超过最大值且最大值小于或等于3.在这种情况下,省略号不会添加到字符串的末尾。我们从第一个字符(位置零)到三个小于最大值的字符串切片,然后添加省略号。

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

  3. 否则,只需返回字符串,因为它不超过最大长度。

  4. &#13;
    &#13;
    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);
    &#13;
    <p id="truncated-string"></p>
    &#13;
    &#13;
    &#13;

答案 1 :(得分:0)

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

&#13;
&#13;
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));
&#13;
&#13;
&#13;

答案 2 :(得分:0)

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

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