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

JS使用对象统计字符串字符数时相似函数结果异常原因求解

问题原因分析

第一段代码统计异常原因

第一段代码的核心问题是obj[char] = 1的执行没有分支限制,无论if判断是否命中,每次遍历到对应字符都会执行这行赋值逻辑:

  • 首次遍历到某字符时:obj[char]不存在,if判断不触发,直接执行obj[char] = 1,计数为1
  • 后续再次遍历到相同字符时:if判断命中,obj[char]先加1,紧接着又被obj[char] = 1覆盖为1,所以所有字符最终计数永远为1,和实际出现次数不符。

第二段代码统计异常原因

第二段代码的问题是累加逻辑没有分支限制,无论if判断是否命中,每次遍历都会执行obj[char] += 1:

  • 首次遍历到某字符时:obj[char]不存在,if判断命中,先执行obj[char] = 1,紧接着执行累加变成2,初始计数就多算了1次
  • 后续再次遍历到相同字符时:if判断不触发,直接累加1,计数逻辑正常。最终所有字符的计数都会比实际出现次数多1,和你给出的结果完全吻合。

正确的实现写法

可以选择以下任意一种写法实现准确统计:

写法1:分支明确赋值

function maxChar(str) {
  let obj = {}   
  for(let char of str){
    if(obj[char]){
      obj[char] += 1 
    } else {
      obj[char] = 1
    }         
  }  
  console.log(obj)
}

写法2:简化默认值处理

function maxChar(str) {
  let obj = {}   
  for(let char of str){
    obj[char] = (obj[char] || 0) + 1      
  }  
  console.log(obj)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:57:03