繁体   English   中英

截断字符串 JavaScript

[英]Truncate a string JavaScript

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

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

但是,如果给定的最大字符串长度 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);

但是,它没有做我需要它做的事情,并且在每次运行时都返回“这不是字符串”。 任何人都可以帮助我吗?

我建议使用而不是... ,因为它是单个字符。

然后,

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

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

正如@sh-ado-w 上面所说,你应该改变你的条件,我认为这就是你想要的。

 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)

“这不是字符串”是正确答案,为什么会这样?

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";
  }

}
    /*This is very late ....but this works. It is all about the boolean comparisons:*/


if (str.length>num && num >3){return str.slice(0, (num -3)) +"...";}

    else if (num>3 || str.length<num){ return str.slice(0,num);}

    else if (str.length>num || num<3){return str.slice(0, num) +"...";}

    }

那些“简单的任务”通常已经在主要的可靠库中解决了。 他们已经处理了很多年并且几乎没有经过测试:这意味着 他们已经解决了您可能遇到的大多数问题 即使您不想使用库,查看代码也会很有用。

除非你想通过实践学习重写这种东西,你最好使用Lodash truncate()

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

repl.it 上的演示代码

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

 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));

这是我的解决方案:

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

它是如何工作的

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);

您可以使用以下函数参数str:要截断的字符串,firstCharCount:第一部分显示的字符数,endCharCount:结束部分显示的字符数,dotsCount:中间的点数。

示例truncStringPortion("ID Card Number is 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;
}

巴勃罗的答案是迄今为止最好的答案。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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