【问题标题】:Truncating a String in Javascript (with constraints)在 Javascript 中截断字符串(有约束)
【发布时间】:2016-06-20 16:10:03
【问题描述】:

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

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

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

  2. 最后插入的三个点也应该增加字符串长度。

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

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

示例: truncateString("Absolutely Longer", 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);

【问题讨论】:

  • 1) 在此处发布代码 2) 提出具体问题,不要让我们做你的工作。一旦您有具体问题,我们很乐意为您提供帮助 3) 什么是“错误”
  • 好吧,你的代码说如果它小于 3,添加点。
  • 好的 @AndrewL 已将我的错误消息和代码编辑到我的原始问题中。感谢您的建议。
  • @epascarello 修改了我的代码,但仍然无法解决这个问题...

标签: javascript string truncation


【解决方案1】:

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

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

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

  3. 否则,直接返回字符串,因为它没有超过最大长度。

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);
&lt;p id="truncated-string"&gt;&lt;/p&gt;

【讨论】:

  • 谢谢@Richard。这也是我尝试过的相同逻辑。你能帮我了解我错过的地方吗?尽管将我的代码与您的代码进行了比较,但我仍然无法找到它......
【解决方案2】:

您可以使用 conditional (ternary) operator ?: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));

【讨论】:

  • 非常感谢@Nina。优雅的代码建议。您是否也介意帮我找出我在学习中缺少的东西(刚开始编码)?
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    相关资源
    最近更新 更多