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

JS for/if循环新增对象键改值:统计数组整数频次逻辑错误如何解决?

问题定位
  • 遍历逻辑错误:for...in 遍历数组时,循环变量 i 对应的是数组的索引字符串,而非数组存储的元素值,这是核心错误,导致你最终统计的是索引的出现次数,而非整数元素的出现次数。
  • 变量声明不规范:integers2 未使用 var/let/const 声明,会默认挂载为全局变量,存在作用域污染风险。
  • 输入类型问题:readlineSync.question 返回的输入值为字符串类型,虽然作为对象键时会自动隐式转换不影响统计结果,如果需要键为数字类型可额外做类型转换。
修正方案

把数组遍历段的代码替换为获取元素的遍历逻辑即可,完整修正代码如下:

// 引入readline-sync模块
var readlineSync = require('readline-sync');
// 初始化变量
var integer;
// 补全变量声明
var integers2 = {};
var integers = [];
// 获取用户输入
integer = readlineSync.question('Integer?: ')
// 校验输入,插入1-100的整数,输入0停止
while (integer != 0 && integer >= 1 && integer <= 100){
    console.log("not 0!")
    // 可选:转数字类型后存入数组 integers.push(Number(integer))
    integers.push(integer)
    integer = readlineSync.question('Integer?: ')
}
console.log(integers);
// 改用for...of遍历直接获取数组元素
for(const num of integers){
    if (num in integers2){
        integers2[num] += 1
    } else {
        integers2[num] = 1
    }
}
console.log(integers2)

如果需要兼容不支持for...of的旧版本JS环境,也可以用普通for循环实现:

for(var i = 0; i < integers.length; i++){
    var num = integers[i];
    if (num in integers2){
        integers2[num] += 1
    } else {
        integers2[num] = 1
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:27:03