利用JavaScript为句子加标题的3种方法示例


Posted in Javascript onJanuary 05, 2021

前言

本文基于Free Code Camp基本算法脚本“标题案例一句”。

在此算法中,我们要更改文本字符串,以便每个单词的开头始终都有一个大写字母。

在本文中,我将解释三种方法。首先使用FOR循环,其次使用map()方法,第三次使用replace()方法。

算法挑战

  • 返回提供的字符串,每个单词的首字母大写。确保单词的其余部分为小写。
  • 出于此练习的目的,你还应该大写连接词,例如“ the”和“ of”。

提供的测试用例

  • titleCase(“I'm a little tea pot”)返回一个字符串。
  • titleCase(“I'm a little tea pot”)返回“I'm A Little Tea Pot”。
  • titleCase(“sHoRt AnD sToUt”)返回“ Short And Stout”。
  • titleCase(“HERE IS MY HANDLE HERE IS MY SPOUT”)返回“Here Is My Handle Here Is My Spout”。

1.标题大小写带有FOR循环的句子

对于此解决方案,我们将使用String.prototype.toLowerCase()方法

String.prototype.split()方法,String.prototype.charAt()方法

String.prototype.slice()方法和Array.prototype.join()方法

  • toLowerCase()的方法返回主字符串值转换为小写
  • split()的方法通过分离串为子分割字符串对象到字符串数组。
  • charAt()的方法返回从字符串指定的字符。
  • slice()的方法提取的字符串的一部分,并返回一个新的字符串。
  • join()的方法连接到一个字符串数组的所有元素。

我们将需要在split()方法的括号之间添加一个空格

var strSplit = "I'm a little tea pot".split(' ');

它将输出一个由单词组成的数组:

var strSplit = ["I'm", "a", "little", "tea", "pot"];

如果不在括号中添加空格,则将得到以下输出:

var strSplit = ["I", "'", "m", " ", "a", " ", "l", "i", "t", "t", "l", "e", " ", "t", "e", "a", " ", "p", "o", "t"];

我们将其合并

str[i].charAt(0).toUpperCase()

在FOR循环中将大写前的字符串索引0字符

str[i].slice(1)

将从索引1提取到字符串的末尾。

为了标准化,我们将整个字符串设置为小写。

有注释:

function titleCase(str) {
 // Step 1. Lowercase the string
 str = str.toLowerCase();
 // str = "I'm a little tea pot".toLowerCase();
 // str = "i'm a little tea pot";
 
 // Step 2. Split the string into an array of strings
 str = str.split(' ');
 // str = "i'm a little tea pot".split(' ');
 // str = ["i'm", "a", "little", "tea", "pot"];
 
 // Step 3. Create the FOR loop
 for (var i = 0; i < str.length; i++) {
  str[i] = str[i].charAt(0).toUpperCase() + str[i].slice(1); 
 /* Here str.length = 5
  1st iteration: str[0] = str[0].charAt(0).toUpperCase() + str[0].slice(1);
          str[0] = "i'm".charAt(0).toUpperCase() + "i'm".slice(1);
          str[0] = "I"              + "'m";
          str[0] = "I'm";
  2nd iteration: str[1] = str[1].charAt(0).toUpperCase() + str[1].slice(1);
          str[1] = "a".charAt(0).toUpperCase()  + "a".slice(1);
          str[1] = "A"              + "";
          str[1] = "A";
  3rd iteration: str[2] = str[2].charAt(0).toUpperCase()  + str[2].slice(1);
          str[2] = "little".charAt(0).toUpperCase() + "little".slice(1);
          str[2] = "L"               + "ittle";
          str[2] = "Little";
  4th iteration: str[3] = str[3].charAt(0).toUpperCase() + str[3].slice(1);
          str[3] = "tea".charAt(0).toUpperCase() + "tea".slice(1);
          str[3] = "T"              + "ea";
          str[3] = "Tea";
  5th iteration: str[4] = str[4].charAt(0).toUpperCase() + str[4].slice(1);
          str[4] = "pot".charAt(0).toUpperCase() + "pot".slice(1);
          str[4] = "P"              + "ot";
          str[4] = "Pot";                             
  End of the FOR Loop*/
 }
 
 // Step 4. Return the output
 return str.join(' '); // ["I'm", "A", "Little", "Tea", "Pot"].join(' ') => "I'm A Little Tea Pot"
}

titleCase("I'm a little tea pot");

没有注释:

function titleCase(str) {
 str = str.toLowerCase().split(' ');
 for (var i = 0; i < str.length; i++) {
  str[i] = str[i].charAt(0).toUpperCase() + str[i].slice(1); 
 }
 return str.join(' ');
}
titleCase("I'm a little tea pot");

2.使用map()方法对案例进行标题案例

对于此解决方案,我们将使用Array.prototype.map()方法。

  • map()的方法创建调用此阵列中的每个元件上的提供功能的结果的新的数组。使用map会依次为数组中的每个元素调用一次提供的回调函数,并根据结果构造一个新的数组。

如上例所示,在应用map()方法之前,我们将小写并分割字符串。

代替使用FOR循环,我们将把map()方法作为条件与上一个示例的连接相同。

(word.charAt(0).toUpperCase() + word.slice(1));

有注释:

function titleCase(str) {
 // Step 1. Lowercase the string
 str = str.toLowerCase() // str = "i'm a little tea pot";
 
 // Step 2. Split the string into an array of strings
      .split(' ') // str = ["i'm", "a", "little", "tea", "pot"];
     
 // Step 3. Map over the array
      .map(function(word) {
  return (word.charAt(0).toUpperCase() + word.slice(1));
  /* Map process
  1st word: "i'm"  => (word.charAt(0).toUpperCase() + word.slice(1));
             "i'm".charAt(0).toUpperCase() + "i'm".slice(1);
                "I"           +   "'m";
             return "I'm";
  2nd word: "a"   => (word.charAt(0).toUpperCase() + word.slice(1));
             "a".charAt(0).toUpperCase()  + "".slice(1);
                "A"           +   "";
             return "A";
  3rd word: "little" => (word.charAt(0).toUpperCase()  + word.slice(1));
             "little".charAt(0).toUpperCase() + "little".slice(1);
                "L"            +   "ittle";
             return "Little";
  4th word: "tea"  => (word.charAt(0).toUpperCase() + word.slice(1));
             "tea".charAt(0).toUpperCase() + "tea".slice(1);
                "T"           +   "ea";
             return "Tea";
  5th word: "pot"  => (word.charAt(0).toUpperCase() + word.slice(1));
             "pot".charAt(0).toUpperCase() + "pot".slice(1);
                "P"           +   "ot";
             return "Pot";                            
  End of the map() method */
});

 // Step 4. Return the output
 return str.join(' '); // ["I'm", "A", "Little", "Tea", "Pot"].join(' ') => "I'm A Little Tea Pot"
}

titleCase("I'm a little tea pot");

没有注释:

function titleCase(str) {
 return str.toLowerCase().split(' ').map(function(word) {
  return (word.charAt(0).toUpperCase() + word.slice(1));
 }).join(' ');
}
titleCase("I'm a little tea pot");

3.使用map()和replace()方法对句子进行标题处理

对于此解决方案,我们将继续使用Array.prototype.map()方法并添加String.prototype.replace()方法。

replace()的方法返回与一些或通过替换替换的图案的所有比赛的新字符串。

在我们的例子中,replace()方法的模式将是一个字符串,该字符串将被新的替换替换,并将被视为逐字字符串。我们还可以使用正则表达式作为模式来解决此算法。

如将在第一个示例中看到的那样,在应用map()方法之前,我们将小写并拆分字符串。

有注释:

function titleCase(str) {
 // Step 1. Lowercase the string
 str = str.toLowerCase() // str = "i'm a little tea pot";
 
 // Step 2. Split the string into an array of strings
      .split(' ') // str = ["i'm", "a", "little", "tea", "pot"];
     
 // Step 3. Map over the array
      .map(function(word) {
  return word.replace(word[0], word[0].toUpperCase());
  /* Map process
  1st word: "i'm" => word.replace(word[0], word[0].toUpperCase());
            "i'm".replace("i", "I");
            return word => "I'm"
  2nd word: "a" => word.replace(word[0], word[0].toUpperCase());
           "a".replace("a", "A");
           return word => "A"
  3rd word: "little" => word.replace(word[0], word[0].toUpperCase());
             "little".replace("l", "L");
             return word => "Little"
  4th word: "tea" => word.replace(word[0], word[0].toUpperCase());
            "tea".replace("t", "T");
            return word => "Tea"
  5th word: "pot" => word.replace(word[0], word[0].toUpperCase());
            "pot".replace("p", "P");
            return word => "Pot"                            
  End of the map() method */
});

 // Step 4. Return the output
 return str.join(' '); // ["I'm", "A", "Little", "Tea", "Pot"].join(' ') => "I'm A Little Tea Pot"
}

titleCase("I'm a little tea pot");

没有注释:

function titleCase(str) {
 return str.toLowerCase().split(' ').map(function(word) {
  return word.replace(word[0], word[0].toUpperCase());
 }).join(' ');
}
titleCase("I'm a little tea pot");

总结

到此这篇关于利用JavaScript为句子加标题的文章就介绍到这了,更多相关JavaScript为句子加标题内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
js showModalDialog参数的使用详解
Jan 07 Javascript
jQuery异步加载数据并添加事件示例
Aug 24 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
Oct 17 Javascript
jQuery Ajax调用WCF服务详细教程
Mar 31 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
Nov 02 Javascript
JavaScript中日常收集常见的10种错误(推荐)
Jan 08 Javascript
小程序图片长按识别功能的实现方法
Aug 30 Javascript
JavaScript中的&quot;=、==、===&quot;区别讲解
Jan 22 Javascript
swiper实现异形轮播效果
Nov 28 Javascript
ant design vue中日期选择框混合时间选择器的用法说明
Oct 27 Javascript
如何使用原生Js实现随机点名详解
Jan 06 Javascript
详解Vue slot插槽
Nov 20 Vue.js
绘制微信小程序验证码功能的实例代码
Jan 05 #Javascript
详解JavaScript中分解数字的三种方法
Jan 05 #Javascript
Vue+scss白天和夜间模式切换功能的实现方法
Jan 05 #Vue.js
mapboxgl实现带箭头轨迹线的代码
Jan 04 #Javascript
jenkins自动构建发布vue项目的方法步骤
Jan 04 #Vue.js
vue3弹出层V3Popup实例详解
Jan 04 #Vue.js
vue3自定义dialog、modal组件的方法
Jan 04 #Vue.js
You might like
Ajax+PHP 边学边练之四 表单
2009/11/27 PHP
PHP文件读写操作之文件写入代码
2011/01/13 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
PHP附件下载中文名称乱码的解决方法
2015/12/17 PHP
php使用number_format函数截取小数的方法分析
2016/05/27 PHP
PHP HTTP 认证实例详解
2016/11/03 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
Laravel中正确地返回HTTP状态码方法示例
2019/09/10 PHP
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
Bootstrap嵌入jqGrid,使你的table牛逼起来
2016/05/05 Javascript
深入浅析JavaScript中的scrollTop
2016/07/11 Javascript
AngularJS之依赖注入模拟实现
2016/08/19 Javascript
JS扩展类,克隆对象与混合类实例分析
2016/11/26 Javascript
JS返回只包含数字类型的数组实例分析
2016/12/16 Javascript
JS使用cookie保存用户登录信息操作示例
2019/05/30 Javascript
vue+AI智能机器人回复功能实现
2020/07/16 Javascript
vue中用 async/await 来处理异步操作
2020/07/18 Javascript
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
[01:13:59]LGD vs Mineski Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
[33:42]LGD vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
2016/06/27 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
2018/02/21 Python
python爬虫模拟浏览器访问-User-Agent过程解析
2019/12/28 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
图库照片、免版税图片、矢量艺术、视频片段:Depositphotos
2019/08/02 全球购物
大学秋游活动方案
2014/02/11 职场文书
《再别康桥》教学反思
2014/02/12 职场文书
家具商场的活动方案
2014/08/16 职场文书
计算机实训报告总结
2014/11/05 职场文书
2014年库房工作总结
2014/11/26 职场文书
酒会邀请函
2015/01/31 职场文书
导游词怎么写
2015/02/04 职场文书
pytest配置文件pytest.ini的详细使用
2021/04/17 Python
手残删除python之后的补救方法
2021/06/26 Python
收音机爱好者玩机13年,简评其使用过的19台收音机
2022/04/30 无线电