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.’。


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

小结

加油向未来

目录
相关文章
|
12天前
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
24天前
|
缓存 监控 前端开发
JavaScript 实现大文件上传的方法
【10月更文挑战第17天】通过以上步骤和方法,我们可以实现较为可靠和高效的大文件上传功能。当然,具体的实现方式还需要根据实际的应用场景和服务器要求进行调整和优化。
|
11天前
|
JavaScript 前端开发 索引
js中DOM的基础方法
【10月更文挑战第31天】这些DOM基础方法是操作网页文档结构和实现交互效果的重要工具,通过它们可以动态地改变页面的内容、样式和行为,为用户提供丰富的交互体验。
|
11天前
|
缓存 JavaScript UED
js中BOM中的方法
【10月更文挑战第31天】
|
11天前
|
JavaScript 前端开发
.js方法参数argument
【10月更文挑战第26天】`arguments` 对象为JavaScript函数提供了一种灵活处理参数的方式,能够满足各种不同的参数传递和处理需求,在实际开发中具有广泛的应用价值。
27 7
|
12天前
|
JavaScript 前端开发 图形学
JavaScript 中 Math 对象常用方法
【10月更文挑战第29天】JavaScript中的Math对象提供了丰富多样的数学方法,涵盖了基本数学运算、幂运算、开方、随机数生成、极值获取以及三角函数等多个方面,为各种数学相关的计算和处理提供了强大的支持,是JavaScript编程中不可或缺的一部分。
|
17天前
|
JavaScript 前端开发 Go
异步加载 JS 的方法
【10月更文挑战第24天】异步加载 JavaScript 是提高网页性能和用户体验的重要手段。通过使用不同的方法和技术,可以实现灵活、高效的异步加载 JavaScript。在实际应用中,需要根据具体情况选择合适的方法,并注意处理可能出现的问题,以确保网页能够正常加载和执行。
|
28天前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
|
1月前
|
自然语言处理 前端开发 JavaScript
🛠️ JavaScript数组操作指南:20个精通必备技巧🚀
本文详细介绍了 JavaScript 中的 20 个高效数组操作技巧,涵盖了从基本的添加、移除元素,到数组转换和去重等高级操作。强调了不可变性的重要性,提供了清晰的代码示例,帮助开发者编写更整洁和高效的代码。无论是新手还是经验丰富的开发者,这些技巧都将显著提升您的编码能力,使您在项目中更具竞争力。
22 2
|
29天前
|
存储 JavaScript 前端开发
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
JavaScript 数据类型分为基本数据类型和引用数据类型。基本数据类型(如 string、number 等)具有不可变性,按值访问,存储在栈内存中。引用数据类型(如 Object、Array 等)存储在堆内存中,按引用访问,值是可变的。本文深入探讨了这两种数据类型的特性、存储方式、以及检测数据类型的两种常用方法——typeof 和 instanceof,帮助开发者更好地理解 JavaScript 内存模型和类型检测机制。
67 0
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法