JavaScript编码之路 【JavaScript之操作数组、字符串方法汇总】(三)

简介: JavaScript编码之路 【JavaScript之操作数组、字符串方法汇总】(三)

JavaScript编码之路 【JavaScript之操作数组、字符串方法汇总】(二):https://developer.aliyun.com/article/1556672

字符串

字符串的常用方法

操作方法

这里增的意思并不是说直接增添内容,而是创建字符串的一个副本,再进行操作除了常用+以及${}进行字符串拼接之外,还可通过concat

concat()
let stringValue = "hello ";
let result = stringValue.concat("world");
console.log(result); // "hello world"
console.log(stringValue); // "hello "

这里的删的意思并不是说删除原字符串的内容,而是创建字符串的一个副本,再进行操作

常见的有:

  • slice()
  • substr()
  • substring()
  • 这些方法的主要区别在于参数的不同。

slice(startIndex, endIndex)方法根据指定的开始索引和结束索引来提取源字符串的子字符串。它返回从开始索引(包括)到结束索引(不包括)之间的字符。

示例:

let str = "Hello World";
let result = str.slice(0, 5);
console.log(result); // 输出:"Hello"

如上,slice(0, 5)提取了字符串str从索引0开始到索引5之前的子字符串。

substr(startIndex, length)方法根据指定的开始索引和长度来提取源字符串的子字符串。它返回从开始索引位置开始并且具有指定长度的字符

示例:

let str = "Hello World";
let result = str.substr(6, 5);
console.log(result); // 输出:"World"

如上,substr(6, 5)提取了字符串str从索引6开始的5个字符的子字符串。


substring(startIndex, endIndex)方法根据指定的开始索引和结束索引来提取源字符串的子字符串。与slice()方法类似,它返回从开始索引(包括)到结束索引(不包括)之间的字符。

示例:

let str = "Hello World";
let result = str.substring(6, 11);
console.log(result); // 输出:"World"

如上,substring(6, 11)提取了字符串str从索引6开始到索引11之前的子字符串。


slice()和substring()方法在大部分情况下是相似的,它们都是用来提取字符串中一段子串的。


它们的区别主要在于对负数索引的处理和对参数顺序的不同处理方式。


对负数索引的处理:

  • slice(startIndex, endIndex)方法允许使用负数索引。当使用负数索引时,它们会从字符串的末尾开始计数。

示例:

let str = "Hello World";
let result = str.slice(-5, -1); // "Worl"
  • substring(startIndex, endIndex)方法不支持负数索引,如果传入负数,它们会被视为0。

示例:

let str = "Hello World";
let result = str.substring(-5, -1); // "Hello"
  1. 对参数顺序的处理:
  • slice(startIndex, endIndex)方法会自动调整参数顺序,确保startIndex小于等于endIndex。

示例:

let str = "Hello World";
let result = str.slice(6, 2); // "llo "
  • substring(startIndex, endIndex)方法不会自动调整参数顺序,如果startIndex大于endIndex,它们会被视为0。

示例:

let str = "Hello World";
let result = str.substring(6, 2); // " "

总结来说,slice()和substring()方法在常规用法下非常相似,它们都可以提取字符串的子串。但是在对负数索引和参数顺序处理上存在一些细微差别。


这里改的意思也不是改变原字符串,而是创建字符串的一个副本,再进行操作


常见的有:


  • trim()、trimLeft()、trimRight()
  • repeat()
  • padStart()、padEnd()
  • toLowerCase()、toUpperCase()
trim()、trimLeft()、trimRight()

删除前、后或前后所有空格符,再返回新的字符串

let stringValue = " hello world "
let trimStringValue() = stringValue.trim()
console.log(trimStringValue) // "hello world"
repeat()

接收一个整数参数,表示要将字符串复制多少次,然后返回拼接所有副本后的结果

let stringValue = "china "
let copyStringValue = stringValue.repeat(2)

padStart()、padEnd()

padStart()和padEnd()方法都用于将字符串填充到指定长度。


padStart()方法用于在字符串的开头添加空格或其他字符,以便使字符串达到指定的长度,如果原始字符串已经达到或超过指定的长度,则不进行任何操作。它接受两个参数,第一个参数表示目标长度,第二个参数表示用于填充字符串的字符,默认为空格。

以下是padStart()方法的使用示例:

let str = "Hello";
let result = str.padStart(10, "-");
console.log(result); // 输出:"-----Hello"

在上述示例中,padStart(10, “-”)将在字符串str的开头添加5个"-"字符,以便使字符串达到10个字符的长度。


padEnd()方法用于在字符串的结尾添加空格或其他字符,以便使字符串达到指定的长度,如果原始字符串已经达到或超过指定的长度,则不进行任何操作。它接受两个参数,第一个参数表示目标长度,第二个参数表示用于填充字符串的字符,默认为空格。

以下是padEnd()方法的使用示例:

let str = "World";
let result = str.padEnd(10, "-");
console.log(result); // 输出:"World-----"

在上述示例中,padEnd(10, “-”)将在字符串str的结尾添加5个"-"字符,以便使字符串达到10个字符的长度。


需要注意的是,如果用于填充字符串的字符长度超过要填充的长度,则会将其截取为指定长度。如果不传入第二个参数,则默认使用空格进行填充。


toLowerCase()、toUpperCase()

大小写转化

let stringValue = "hello World"
console.log(stringValue.toLowerCase()) // hello world
console.log(stringValue.toUpperCase()) // HELLO WORLD

除了通过索引的方式来获取字符串的值,还可以通过:

  • charAt()
  • indexOf()
  • startWith()
  • includes()
charAt()

charAt()方法用于返回给定索引位置的字符。它接受一个整数作为参数,该整数指定要返回字符的位置。索引位置从0开始,表示字符串中的第一个字符。

以下是charAt()方法的使用示例:

let str = "Hello World";
let char = str.charAt(4);
console.log(char); // 输出:o

如上,charAt(4)返回在字符串str中索引为4的字符,即字母"o"。

需要注意的是,如果给定的索引超出了字符串的范围,charAt()方法将返回一个空字符串。

let str = "Hello World";
let char = str.charAt(20);
console.log(char); // 输出:空字符串

如上,索引20超出了字符串str的范围,因此返回一个空字符串

indexOf()

indexOf()方法用于在字符串中搜索指定的子字符串,并返回该子字符串第一次出现的位置。如果没有找到该子字符串,则返回-1。

以下是indexOf()方法的使用示例:

let str = "Hello World";
let pos = str.indexOf("World");
console.log(pos); // 输出:6

如上,indexOf(“World”)在字符串str中搜索子字符串"World",并返回该子字符串第一次出现的位置,即6。


需要注意的是,indexOf()方法区分大小写。如果要进行不区分大小写的搜索,请使用toLowerCase()或toUpperCase()先将字符串转换为小写或大写,再进行搜索。

let str = "Hello World";
let pos = str.indexOf("world");
console.log(pos); // 输出:-1,未找到

在上述示例中,由于"world"与"World"大小写不同,因此indexOf()方法未能找到该子字符串,返回-1。


startWith() 、includes()

startsWith()和includes()方法都用于在字符串中搜索指定的子字符串,并返回一个布尔值表示是否包含该子字符串。


startsWith()方法用于判断字符串是否以指定的子字符串开头。它接受一个字符串参数,用于指定要搜索的子字符串。如果原始字符串以该子字符串开头,则返回true,否则返回false。

以下是startsWith()方法的使用示例:

let str = "Hello World";
let result = str.startsWith("Hello");
console.log(result); // 输出:true

如上,startsWith(“Hello”)判断字符串str是否以"Hello"开头,并返回true,因为字符串str确实以"Hello"开头。


includes()方法用于判断字符串是否包含指定的子字符串。它接受一个字符串参数,用于指定要搜索的子字符串。如果原始字符串包含该子字符串,则返回true,否则返回false。


以下是includes()方法的使用示例:

let str = "Hello World";
let result = str.includes("World");
console.log(result); // 输出:true

如上,includes(“World”)判断字符串str是否包含"World"子字符串,并返回true,因为字符串str确实包含"World"子字符串。


需要注意的是,startsWith()和includes()方法都区分大小写。如果要进行不区分大小写的搜索,请使用toLowerCase()或toUpperCase()先将字符串转换为小写或大写,再进行搜索。


转换方法

split()

split() 是 JavaScript 字符串对象的一个方法,它用于将字符串按照指定的分隔符进行拆分,并返回一个由拆分后的子字符串组成的数组。


split() 方法接收一个参数,用于表示要使用的分隔符。该参数可以是一个字符串或正则表达式。如果传入的是一个字符串,字符串中的每个字符都会被视为分隔符,用于拆分字符串。如果传入的是一个正则表达式,则根据匹配到的模式来拆分字符串。

下面是一个使用 split() 方法的示例:

const str = 'The quick brown fox jumps over the lazy dog.';
const separator = ' ';

const arr = str.split(separator);
console.log(arr);  // [ 'The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog.' ]

如上,我们使用空格 ’ ’ 来作为分隔符,将字符串 str 拆分成了一个由单词组成的数组。split() 方法返回的数组为 [ ‘The’, ‘quick’, ‘brown’, ‘fox’, ‘jumps’, ‘over’, ‘the’, ‘lazy’, ‘dog.’ ]。


需要注意的是,如果传入的分隔符为空字符串 ‘’,则会将字符串拆分为每个字符一个元素的数组。如果传入的分隔符为 null 或没有传入参数,则返回包含整个字符串的数组。


练习split()

split() 方法非常灵活,可以根据需要选择不同的分隔符和参数。它可以帮助我们方便地处理字符串,并将其拆分为需要的部分。

const str1 = 'apple,banana,orange';
const str2 = '1 2 3 4 5';
const str3 = 'Hello,World!';
const str4 = 'apple|banana|orange';
const str5 = 'abcbdbbdbdbbdddbdbddbb';

// 使用逗号分隔字符串,生成数组
const arr1 = str1.split(',');
console.log(arr1);  // [ 'apple', 'banana', 'orange' ]

// 使用空格分隔字符串,生成数组
const arr2 = str2.split(' ');
console.log(arr2);  // [ '1', '2', '3', '4', '5' ]

// 使用正则表达式分隔字符串,生成数组
const arr3 = str3.split(/[,!]/);
console.log(arr3);  // [ 'Hello', 'World' ]

// 使用竖线分隔字符串,生成数组
const arr4 = str4.split('|');
console.log(arr4);  // [ 'apple', 'banana', 'orange' ]

// 不传入参数,默认将字符串拆分为每个字符一个元素的数组
const arr5 = str5.split();
console.log(arr5);  // [ 'a', 'b', 'c', 'b', 'd', 'b', 'd', 'b', 'd', 'b', 'b', 'd', 'd', 'b', 'd', 'b' ]

// 拆分指定次数,使用正则表达式拆分字符串
const arr6 = str5.split(/b/, 4);
console.log(arr6);  // [ 'a', 'c', 'dbd', 'd' ]

我们对一个字符串进行了多个操作:

  1. 使用空格将字符串拆分为单词,并计算单词数量。
  2. 统计每个单词的出现次数,并生成一个包含单词和频率的对象。
  3. 使用正则表达式将字符串拆分为句子,并计算句子数量。
  4. 查找包含特定单词的句子。
  5. 将字符串拆分为字符数组,并逆序排列字符。
  6. 使用 join() 方法将逆序排列的字符组合成字符串。
const text = 'Welcome to the JavaScript world! Keep learning and keep coding!';

// 将字符串拆分为单词,并计算单词数量
const words = text.split(' ');
const wordCount = words.length;
console.log('单词数量:', wordCount);  // 单词数量: 9

// 统计每个单词的出现次数
const wordFrequency = {};
words.forEach(word => {
  if (word in wordFrequency) {
    wordFrequency[word]++;
  } else {
    wordFrequency[word] = 1;
  }
});
console.log('单词频率:', wordFrequency);
/*
单词频率: {
  Welcome: 1,
  to: 1,
  the: 1,
  JavaScript: 1,
  world!: 1,
  Keep: 1,
  learning: 1,
  and: 1,
  coding!: 1
}
*/

// 将字符串拆分为句子,并计算句子数量
const sentences = text.split(/[.!?]/);
const sentenceCount = sentences.length;
console.log('句子数量:', sentenceCount);  // 句子数量: 2

// 查找包含特定单词的句子
const keyword = 'learning';
const sentencesWithKeyword = sentences.filter(sentence => sentence.toLowerCase().includes(keyword));
console.log('包含关键词 "', keyword, '" 的句子:', sentencesWithKeyword);
// 包含关键词 " learning " 的句子: [ ' Keep learning and keep coding' ]

// 拆分字符串为字符数组,并逆序排列字符
const characters = text.split('');
const reversedCharacters = characters.reverse();
const reversedText = reversedCharacters.join('');
console.log('逆序排列的字符串:', reversedText);
// 逆序排列的字符串: !gnidoc peek dna gninrael peeK .dlrow tpircSavaJ eht ot emocleW
模板匹配方法

针对正则表达式,字符串设计了几个方法:

  • match()
  • search()
  • replace()
match()

match() 方法是 JavaScript 字符串对象的一个方法,它用于执行正则表达式匹配操作,并返回一个包含匹配结果的数组。


match() 方法接收一个参数,可以是一个正则表达式字符串或一个 RegExp 对象。如果参数是正则表达式字符串,则会隐式地创建一个 RegExp 对象来进行匹配。


match() 方法会返回一个数组,其中包含所有与正则表达式匹配的子字符串。如果没有匹配到任何内容,则返回 null。

下面是一个使用 match() 方法的示例:

const str = 'Hello, world!';
const pattern = /[A-Z]/g;

const matches = str.match(pattern);
console.log(matches);  // ['H']

如上,我们使用正则表达式 /[A-Z]/g 来匹配字符串 str 中的大写字母。match() 方法返回了一个数组,其中包含与正则表达式匹配的子字符串 ‘H’。


需要注意的是,如果正则表达式包含全局标志 g,则 match() 方法将返回所有匹配的子字符串组成的数组。如果正则表达式没有全局标志 g,则 match() 方法只返回第一个匹配项及其相关信息的数组。


search()

search() 方法是 JavaScript 字符串对象的一个方法,它用于在字符串中查找指定正则表达式的第一个匹配项,并返回匹配项的索引值。如果没有找到匹配项,则返回 -1。

search() 方法接收一个参数,可以是一个正则表达式字符串或一个 RegExp 对象。如果参数是一个字符串,则会被隐式地转换为一个正则表达式对象来进行匹配。

下面是一个使用 search() 方法的示例:

const str = 'The quick brown fox jumps over the lazy dog.';
const pattern = /brown/;

const index = str.search(pattern);
console.log(index);  // 10

如上,我们使用正则表达式 /brown/ 来查找字符串 str 中的 brown 子字符串。search() 方法返回了匹配项的索引值 10。


需要注意的是,如果正则表达式包含全局标志 g,则 search() 方法将忽略该标志,并始终只返回第一个匹配项的索引值。


replace()

replace() 方法是 JavaScript 字符串对象的一个方法,它用于在字符串中查找指定的模式并用另一个字符串或函数来替换它。该方法返回一个新的字符串,不改变原来的字符串。


replace() 方法接收两个参数,第一个参数可以是一个正则表达式或字符串,用于表示要替换的模式或文本。如果该参数是字符串,则只会替换第一个匹配项。如果该参数是一个正则表达式,且包含全局标志 g,则会替换所有匹配项。第二个参数可以是一个字符串或函数,用于表示要替换成的内容。


下面是一个使用 replace() 方法的示例:

const str = 'The quick brown fox jumps over the lazy dog.';
const pattern = /fox/;

const newStr = str.replace(pattern, 'cat');
console.log(newStr);  // 'The quick brown cat jumps over the lazy dog.'

如上,我们使用正则表达式 /fox/ 来查找字符串 str 中的 fox 子字符串,并使用字符串 ‘cat’ 来替换它。replace() 方法返回了一个新的字符串 ‘The quick brown cat jumps over the lazy dog.’。


需要注意的是,如果第二个参数是一个函数,则该函数将被调用来生成替换文本。该函数接收匹配到的子字符串、匹配项在字符串中的索引、以及原始字符串作为参数。函数应该返回一个用来替换匹配项的字符串。

小结

加油向未来

目录
相关文章
|
29天前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
1月前
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
2月前
|
缓存 监控 前端开发
JavaScript 实现大文件上传的方法
【10月更文挑战第17天】通过以上步骤和方法,我们可以实现较为可靠和高效的大文件上传功能。当然,具体的实现方式还需要根据实际的应用场景和服务器要求进行调整和优化。
|
27天前
|
监控 JavaScript Java
Node.js中内存泄漏的检测方法
检测内存泄漏需要综合运用多种方法,并结合实际的应用场景和代码特点进行分析。及时发现和解决内存泄漏问题,可以提高应用的稳定性和性能,避免潜在的风险和故障。同时,不断学习和掌握内存管理的知识,也是有效预防内存泄漏的重要途径。
122 52
|
1月前
|
JavaScript 前端开发 索引
js中DOM的基础方法
【10月更文挑战第31天】这些DOM基础方法是操作网页文档结构和实现交互效果的重要工具,通过它们可以动态地改变页面的内容、样式和行为,为用户提供丰富的交互体验。
|
1月前
|
缓存 JavaScript UED
js中BOM中的方法
【10月更文挑战第31天】
|
29天前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
41 5
|
1月前
|
JavaScript 前端开发 数据处理
模板字符串和普通字符串在浏览器和 Node.js 中的性能表现是否一致?
综上所述,模板字符串和普通字符串在浏览器和 Node.js 中的性能表现既有相似之处,也有不同之处。在实际应用中,需要根据具体的场景和性能需求来选择使用哪种字符串处理方式,以达到最佳的性能和开发效率。
|
1月前
|
JavaScript 前端开发 索引
JavaScript学习第二章--字符串
本文介绍了JavaScript中的字符串处理,包括普通字符串和模板字符串的使用方法及常见字符串操作方法如`charAt`、`concat`、`endsWith`等,适合前端学习者参考。作者是一位热爱前端技术的大一学生,专注于分享实用的编程技巧。
24 2
|
1月前
|
JavaScript 前端开发
js中的bind,call,apply方法的区别以及用法
JavaScript中,`bind`、`call`和`apply`均可改变函数的`this`指向并传递参数。其中,`bind`返回一个新函数,不立即执行;`call`和`apply`则立即执行,且`apply`的参数以数组形式传递。三者在改变`this`指向及传参上功能相似,但在执行时机和参数传递方式上有所区别。
26 1