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

请教JavaScript中fq1[val] = (fq1[val] || 0) + 1代码的执行逻辑

解释fq1[val] = (fq1[val] || 0) + 1的执行逻辑

这段代码是统计数组元素出现次数的核心逻辑,我们一步步拆解这行代码的运行过程:

1. 先理解fq1[val]的作用

fq1是一个空对象,我们用数组里的元素val作为对象的键,键对应的值就是该元素在数组中出现的次数。比如第一次遇到元素1时,fq1[1]会被赋值为1,代表1出现了1次。

2. 拆解(fq1[val] || 0)

这里用到了JavaScript中**逻辑或运算符||**的特性:

  • 如果||左边的表达式是「假值」(比如undefined、null、0、''等),就会返回右边的值
  • 如果左边是「真值」(比如数字1、2等),就直接返回左边的值

第一次遍历某个元素时,fq1里还没有对应的键,所以fq1[val]的结果是undefined(属于假值),此时(fq1[val] || 0)就会返回0;当这个元素再次出现时,fq1[val]已经是之前统计的次数(比如1),属于真值,就会直接返回这个次数。

3. 最后+1的作用

不管是从0开始加1(元素第一次出现),还是从已有的次数加1(元素重复出现),这一步都能实现次数累加,让fq1[val]始终等于当前元素的总出现次数。

结合你的例子走一遍流程

你的测试数组是[1,2,3,3],遍历过程如下:

  • 遍历val=1:fq1[1]是undefined,undefined || 0返回0,0+1=1 → fq1[1] = 1
  • 遍历val=2:fq1[2]是undefined,undefined ||0返回0,0+1=1 → fq1[2] =1
  • 遍历val=3:fq1[3]是undefined,undefined ||0返回0,0+1=1 → fq1[3] =1
  • 遍历val=3:fq1[3]已经是1,1 ||0返回1,1+1=2 → fq1[3] =2

最终fq1的结果是{1:1, 2:1, 3:2},完全符合统计次数的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:31:03