字符串
字符串在自然世界中充当着非常重要的角色,所有的自然语言(比如汉语、英语等)都由多个字符组成,比如经典的 “Hello World” 这句话则由 11 个字符组成:H,e,l,l,o,
创建字符串
在 JavaScript 中创建一个字符串跟其他语言并没有较大的区别,可以分别使用 ‘、” 和 ` 作为边界标识。
1 | const str1 = 'string 1' |
虽然 `
同样可以以与 '
和 "
一样的使用方式使用,但也可以有更高级的用法。
1 | const target = 'World' |
同时 `
也可以用于创建一个“多行字符串”,即字符串内容中包含多行文本。
1 | const str = ` |
分割字符串
一般来说人们都会使用词频统计作为数据科学的 “Hello World”,简单来说就是对一段英语内容中的单词进行频次(出现次数)统计。我们在进行词频统计之前,我们首先需要对源内容进行预处理。首先我们要了解的是,我们可以看到这段内容中有小写字母、大写字母以及标点符号(包括逗号、句号、括号、双引号、斜杠和冒号)。
而从语言角度,HELLO、hello 和 Hello 都是一样的,所以我们需要先完成以下预处理任务:
- 去除文本中的标点符号、数字
- 将所有大写字母转换为小写字母 假设原文为 “Hey dude, how is it going?”,则需要首先转换为 “hey dude how is it going”。
去除文本中的标点符号
在做任何需求之前,都需要先对需求的上下文进行多方位理解,比如去除标点符号、数字这个需求在全英语的语境下可以说是约等于只保留英文字母。这样我们就可以从文本中直接筛选出英文字母和空格即可,这里可以使用 ASCII 码进行甄别。大写字母的 ASCII 码范围为 65 到 90,即 A 到 Z,而小写字母则为 97 到 122,空格的 ASCII 码为 32,换行符的 ASCII 码为 10。在 JavaScript 可以用 string.charCodeAt() 方法获取字符的 ASCII 码。
1 | const originalText = 'Hey dude, how is it going?' |
将所有大写字母转换为小写字母
上面我们用到了 string.charCodeAt() 方法来获取字符的 ASCII 码,那么自然也有对应的方法用于将 ASCII 码转换为对应字符 String.fromCharCode(code)。
而从字母的 ASCII 码范围可以看到,将大写字母的 ASCII 码数值加上 32 便是其对应小写字母的 ASCII 码数值。
1 | let lowerCaseText = '' |
JavaScript 内置将文本中的大写字母转换为小写字母的 API —— string.toLowerCase()。
完成了文本的预处理之后,就可以将文本数据进行分割了。而最主要用到的方法便是 string.split(separator)
1 | const originalText = ` |
组装字符串
字符串之间的连接可以直接使用 + 运算符完成。若当数据量比较大时,需要将多个数据量“嵌入”到一个文本模板中。一般情况下,开发工程师会选择一个较为顺手的模板引擎来实现这个功能,但在这里我们一切从简,使用 JavaScript 中的字符串模板特性 ` 来完成这个需求。
数字
除了自然语言以外,当我们需要准确地表达世界上任何事物时,我们还需要有数字的帮助。
四则运算
四则运算是所有数学运算的基础。
1 | const a = 3 |
幂运算
幂运算,又称指数运算,是数学中非常重要的一种运算方式,具体定义便是同一个数值的多次自乘结果。有了幂运算才有后面更为深入的对数运算、导数运算、方差运算等等。在 JavaScript 中,使用 Math.pow(base, exponent) 来进行幂运算,其中 base 为底数即上式中的 n,而 exponent 则为指数即右上角的 3。
1 | const V1 = 3 * 3 * 3 |
对数运算
数学中这就涉及了对数运算,比如求“27 是 3 的多少次方”则为
而在数学中有一个神奇的数值自然对数,关于这个数值的传奇故事你可以搜索到非常多的文章甚至视频。在 JavaScript 中的 Math.log(x)
函数只接受一个参数,而这个函数的直接作用便是计算以自然对数 为底 的对数。
那么就很奇怪了,我们要如何在 JavaScript 中计算并非以为底的对数结果呢?这得先回到数学推导上来。对数中有一个经典公式为换底公式,定义如下:
具体推导可以参考维基百科页面 · 对数。那么代入我们前面公式中就可以用这样的方式解决了。
换成使用 JavaScript 实现便是:
1 | function getBaseLog(base, x) { |