【问题标题】:Replace consecutive white spaces between words with one hyphen用一个连字符替换单词之间的连续空格
【发布时间】:2020-03-16 15:23:45
【问题描述】:

问题来自freecodecamp Link

填写urlSlug 函数,以便它转换字符串title 并返回URL 的连字符版本。您可以使用本节介绍的任何方法,但不要使用replace。以下是要求:

输入是一个带有空格和标题字的字符串

输出是一个字符串,其中单词之间的空格被替换为 连字符 (-)

输出应全部为小写字母

输出不应有任何空格

// the global variable
var globalTitle = " Winter Is  Coming";


function urlSlug(title) {
let toArr = title.split("");
let newArr = toArr.map(a=> {
    if(a==" "){
        a= "-";
    }


    return a.toLowerCase();
} );

if(newArr[0] == "-"){
    newArr.splice(0,1);
}


let finalArr = newArr.join("");
return finalArr;

}
// Add your code above this line

var winterComing = urlSlug(globalTitle); // Should be "winter-is-coming"
console.log(urlSlug(globalTitle));

现在我无法解决如何从输出中删除多余的连字符。

我不应该使用replace

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    另一种选择是继续您对split() 的想法,然后使用reduce 将数组的元素减少为单个输出:

    var globalTitle = " Winter Is  Coming";
    
    function urlSlug(title) {
        let split = title.split(' ');
    
        return split.reduce((accumulator, currentValue, index) => {
            if (currentValue.length > 0) {
                accumulator += currentValue.toLowerCase();
                accumulator += (index < split.length - 1) ? '-' : '';
            }
    
            return accumulator;
        });
    }
    
    console.log(urlSlug(globalTitle));

    【讨论】:

      【解决方案2】:

      我一直在研究它,还没有看答案。 但我是这样解决的。可能效率不高。

      // the global variable
      var globalTitle = "Winter Is Coming";
      function urlSlug(title) {
      let toArr = title.split("");
      let newArr = toArr.map(a=> {
          if(a==" "){
              a= "-";
          }
      
      
          return a.toLowerCase();
      } );
      if(newArr[0] == "-"){
          newArr.splice(0,1);
      }
      
      for(let i=0;i<newArr.length;i++){
          if(newArr[i-1]=="-"&& newArr[i]=="-")
          {
              newArr.splice(i,1,"");
          }
      }
      let finalArr = newArr.join("");
      return finalArr;
      
      }
      
      var winterComing = urlSlug(globalTitle); // Should be "winter-is-coming"
      console.log(urlSlug(globalTitle));
      

      【讨论】:

        【解决方案3】:

        可以使用trim() 和一个简单的正则表达式轻松做到这一点:

        var globalTitle = "  Winter       Is  Coming Now    ";
        var slug = globalTitle.trim().replace(/[ ]+/g, '-').toLowerCase();
        console.log(slug);

        [ ]+ 确保任意数量的空格(1 个或更多)被一个减号替换一次。

        如果由于某种原因你不能使用替换,你可以像这样使用Array.filter()

        var title = "       Winter     Is Coming     Now     ";
        var slug = title.split(" ").filter(word => word.length > 0).join("-").toLowerCase();
        console.log(slug);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-27
          • 2014-10-26
          • 2013-03-31
          • 2011-05-13
          • 2020-04-22
          • 1970-01-01
          • 2011-04-21
          • 1970-01-01
          相关资源
          最近更新 更多