You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何统计名称数组中字符'l'的总出现次数

JavaScript统计数组内字符串指定字符总出现次数的实现方案

indexOf 单次调用只能返回目标字符第一次出现的索引,无法统计单个字符串内重复出现的字符,也不会自动遍历数组累加计数,这是你之前实现失败的核心原因。
以下是几种可实现需求的方案:

方法1:split() 分割法(简洁易读)

利用split按目标字符分割字符串,分割后得到的数组长度减1,就是当前字符串中目标字符的出现次数,配合reduce做累加即可,代码可读性很高。

const nameList = ["earth (c-137)","abadango","citadel of ricks","worldender's lair","anatomy park","interdimensional cable","immortality field resort","post-apocalyptic earth","purge planet","venzenulon 7","bepis 9","cronenberg earth","nuptia 4","giant's town","bird world","st. gloopy noops hospital","earth (5-126)","mr. goldenfold's dream","gromflom prime","earth (replacement dimension)","testicle monster dimension","signus 5 expanse","earth (c-500a)","rick's battery microverse","the menagerie","earth (k-83)","hideout planet","unity's planet","dorian 5","earth (unknown dimension)","earth (j19ζ7)","roy: a life well lived","eric stoltz mask earth","earth (evil rick's target dimension)","planet squanch","glaagablaaga","resort planet","interdimensional customs","galactic federation prison","gazorpazorp"];

const totalLCount = nameList.reduce((acc, cur) => {
  // 若需忽略大小写,可改为 cur.toLowerCase().split('l').length - 1
  return acc + cur.split('l').length - 1;
}, 0);

console.log(totalLCount);

方法2:正则匹配法

用带全局匹配符g的正则匹配所有目标字符,匹配结果数组的长度就是当前字符串的字符出现次数;注意没有匹配到结果时match会返回null,需要做判空处理避免报错。

const totalLCount = nameList.reduce((acc, cur) => {
  // 若需同时匹配大写L,正则改为 /l/gi 即可
  const matchRes = cur.match(/l/g);
  return acc + (matchRes ? matchRes.length : 0);
}, 0);

方法3:双层循环遍历(逻辑直白)

最基础的实现方式,没有额外API门槛,适合新手理解逻辑:外层遍历数组每一个字符串项,内层遍历当前字符串的每一个字符,匹配到目标字符就给计数器加1。

let totalLCount = 0;
for (let i = 0; i < nameList.length; i++) {
  const currentStr = nameList[i];
  for (let j = 0; j < currentStr.length; j++) {
    if (currentStr[j] === 'l') {
      totalLCount++;
    }
  }
}

方法4:正确使用indexOf的实现

如果要沿用你之前尝试的indexOf方法,只需要循环调用即可:每次找到目标字符后,把查找起始位置设为当前匹配位置的下一位,直到indexOf返回-1(表示当前字符串没有更多匹配项),就能统计出单个字符串内所有重复的目标字符。

let totalLCount = 0;
for (let i = 0; i < nameList.length; i++) {
  const currentStr = nameList[i];
  let findPos = currentStr.indexOf('l');
  while (findPos !== -1) {
    totalLCount++;
    // 从匹配位置的下一位继续向后查找
    findPos = currentStr.indexOf('l', findPos + 1);
  }
}

注意:以上所有示例默认严格匹配小写字母l,如果需要忽略大小写统计,只要在匹配前把当前字符串统一调用.toLowerCase()转成小写即可。

内容的提问来源于stack exchange,提问作者Ignacio Garcia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 15:54:18