截断字符串JavaScript

时间:2016-04-18 20:19:58

标签: javascript string

我的任务是“截断一个字符串(第一个参数),如果它超过给定的最大字符串长度(第二个参数)。返回带有...结尾的截断字符串。

请注意,将三个点插入末尾会增加字符串长度。

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

我写了代码:

function truncateString(str, num) {
  if (num > str.length){
    str.slice(num);
    return str.append("...");
  } 
  else if (num < 3) {
    str.slice(3);
    return str.append("...");
  }
  else {
    return "This is not a string";
  }

}

truncateString("A-tisket a-tasket A green and yellow basket", 11);

然而,它没有做我需要它做的事情并且在每次运行时返回“这不是一个字符串”。谁能帮我?

10 个答案:

答案 0 :(得分:7)

我建议使用代替...,因为它只是一个字符。

然后,

function truncate(str, max) {
  return str.length > max ? str.substr(0, max-1) + '…' : str;
}

注意str.substr(0, -1)返回空字符串。

答案 1 :(得分:2)

如上所述@ sh-ado-w,你应该改变你的条件,我认为这会成为你想要的。

&#13;
&#13;
function truncateString(str, num) {
  if (num > str.length){
    return str;
  } else{
    str = str.substring(0,num);
    return str+"...";
  }

}

res = truncateString("A-tisket a-tasket A green and yellow basket", 11);
alert(res)
&#13;
&#13;
&#13;

答案 2 :(得分:1)

和&#34;这不是字符串&#34;是正确的答案,为什么会这样?

function truncateString(str, num) {
  if (num > str.length){ // if num is greater than string length (in you case 11 is not greater than 43
    str.slice(num);
    return str.append("...");
  } 
  else if (num < 3) {   // or if the num is less than 3 (11 is not less than 3)
    str.slice(3);
    return str.append("...");
  }
  else { // do if no if was matched (and here we are)
    return "This is not a string";
  }

}

所以基本上你需要的是在你的第一个>中将<更改为if:)

修改

您想要的最终代码是(str.append()不是函数):

function truncateString(str, num) {
  if (num < str.length){
    str.slice(num);
    return str + "...";
  } 
  else if (num < 3) {
    str.slice(3);
    return str + "...";
  }
  else {
    return "This is not a string";
  }

}

答案 3 :(得分:1)

Change background image ($("#bildfram").css("background-image", "url(" + bilder[bild] + ")" );)
Change the text ($("header h1").text("GeForce | " + text[bild]);)
Fade out the text ($("header h1").fadeOut(500);)
Fade in the text ($("header h1").fadeIn(500);)

答案 4 :(得分:0)

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

function truncateString(str, num) {
  if (str.length < num) return str;
  var truncStr = str.slice(0, num);
  var truncStrArr = truncStr.split(' ');
  var truncStrArrLen=truncStrArr.length;
  
  if(truncStrArrLen > 1 &&
    truncStrArr[truncStrArrLen - 1] !== str.split(' ')[truncStrArrLen - 1]) {
    truncStrArr.pop();
    truncStr = truncStrArr.join(' ');
  }
  return str.length > num ? truncStr + '...' : truncStr;
}

console.log(truncateString("A-tisket a-tasket A green and yellow basket", 11));

答案 5 :(得分:0)

这是我的解决方案:

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

答案 6 :(得分:0)

它的运作方式

function truncateString(str, num) {
  // Clear out that junk in your trunk
      var st='';
  if(num>=str.length)
    {

      return str;

    }
 else 
   if(num<str.length&&num>3)
 {st=str.slice(0,num-3);
   return st+'...';
 }

 else
 if(num<=3){
st = str.slice(0,num);
return st+"...";
 }


}

truncateString("A-", 1);

答案 7 :(得分:0)

这些“简单任务”通常已在主要可靠的库中得到解决。他们多年来一直处理它并且几乎没有经过测试:它意味着they already solved most of the problems that you could encounter。即使您不想使用库,查看代码也很有用。

除非你想通过练习来重写这种事情,你应该更好地使用Lodash truncate()

_truncate("A-tisket a-tasket A green and yellow basket", {length: 11});
// 'A-tisket...'

Demo code on repl.it

答案 8 :(得分:0)

您可以使用以下功能 参数 str:要截断的字符串, firstCharCount:在第一部分中显示的字符数, endCharCount:要在结尾部分显示的字符数, dotCount:介于两者之间的点数。

示例 truncStringPortion(“ ID卡号为101010”,2,6,3)输出“ ID ... 101010”

function truncStringPortion(str, firstCharCount = str.length, endCharCount = 0, dotCount = 3) {
    var convertedStr="";
    var dotsAdded=false;

    for(var i = 0; i < str.length; i++) {
        if(i < firstCharCount) {
            convertedStr += str.charAt(i);
        }
        else if(!dotsAdded){
            convertedStr += ".".repeat(dotCount);
            dotsAdded=true;
        }
        else if(i > (str.length - endCharCount - 1)) {
            convertedStr += str.charAt(i);
        }
    }
    return convertedStr;
}

答案 9 :(得分:0)

Pablo 的回答是迄今为止最简洁的。

使用 ES6 语法使其更短更整洁:

const truncateStr = (str, num) => (num > str.length) ? str : `${str.substring(0, nm)}...`;