JS中统计指定特殊字符总出现次数的代码修改求助
问题分析
你当前的代码逻辑是统计有多少种指定的特殊字符在字符串中出现过,而不是每个特殊字符的总出现次数——比如空格在示例字符串里出现3次,但includes只会判断它存在,然后count加1,所以最终结果是1(因为只有空格这一种特殊字符符合存在条件)。
修改方案
下面提供几种实用的修改方式,按需选择:
方法1:遍历字符串每个字符(最直观)
直接遍历字符串的每一个字符,判断是否属于指定的特殊字符集合,符合条件就累加计数:
var string = 'hello, i am blue.'; var specialChar = [' ', '!']; let count = 0; // 遍历字符串的每个字符 for (const char of string) { // 如果当前字符在特殊字符列表里,计数+1 if (specialChar.includes(char)) { count++; } } console.log(count); // 输出3
方法2:正则表达式匹配(适合批量字符)
把指定的特殊字符转成正则表达式,全局匹配所有符合条件的字符,通过匹配结果的长度得到总次数:
var string = 'hello, i am blue.'; var specialChar = [' ', '!']; // 先转义正则特殊字符(比如如果有.、*这类字符,避免语法错误) const escapedChars = specialChar.map(char => char.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') ); // 创建全局匹配的正则 const regex = new RegExp(escapedChars.join('|'), 'g'); // 匹配所有符合条件的字符 const matches = string.match(regex); // 有匹配结果就取长度,否则为0 const count = matches ? matches.length : 0; console.log(count); // 输出3
方法3:用Set优化判断效率(特殊字符较多时推荐)
把特殊字符转成Set集合,利用Set的has方法比数组includes更快的特性,结合reduce累加计数:
var string = 'hello, i am blue.'; var specialChar = [' ', '!']; // 转成Set提升判断速度 const specialCharSet = new Set(specialChar); // 拆分字符串为字符数组,用reduce累加 const count = string.split('').reduce((total, char) => { return specialCharSet.has(char) ? total + 1 : total; }, 0); console.log(count); // 输出3
内容的提问来源于stack exchange,提问作者poipoi
相关产品推荐
相关产品推荐

