如何用JavaScript统计数组中用户输入数字的出现次数?
问题分析与代码修正
你的需求是获取用户输入的数字,统计该数字在指定数组中的出现次数并输出结果,但现有代码存在多处错误导致无法正常运行,以下是问题梳理和修正后的代码:
错误点梳理
- 循环对象错误:
number是转换后的数字类型,没有length属性,原循环for (let i = 0; i < number.length; i++)根本不会执行,应该遍历目标数组myArray。 - 匹配逻辑错误:原代码用
myArray[i] === number是拿数组第i位元素和输入数字对比,但遍历数组时应该检查每个元素是否等于输入数字,而非对应索引的元素。 - 变量拼写错误:最后给结果标签赋值时,把声明好的
repeating写成了repating,导致无法找到DOM元素。 - 未实现次数统计输出:原代码只判断了是否存在,没有输出统计的出现次数,不符合需求。
- DOM加载时机问题:脚本放在
<head>中时,DOM还未渲染完成,调用document.getElementById会返回null,应该把脚本移到<body>末尾。
修正后的完整代码
HTML代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Js</title> </head> <body> <label for="number">请输入一个数字,查看它是否在我的数组中</label> <input type="text" id="number"> <button onclick="repeatNumber()">检查</button> <p id="compare"></p> <!-- 脚本移到body末尾,确保DOM已加载 --> <script src="/controlFlow/script.js"></script> </body> </html>
JavaScript代码
function repeatNumber() { // 获取输入并转换为数字 const number = parseFloat(document.getElementById("number").value); const myArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; let count = 0; // 遍历目标数组统计出现次数 for (let i = 0; i < myArray.length; i++) { if (myArray[i] === number) { count++; } } // 获取结果展示标签 const repeating = document.getElementById("compare"); // 输出结果,包含是否存在和出现次数 repeating.textContent = `你的数字是否在数组中?${count > 0},出现次数:${count}`; }
你也可以用数组的filter方法简化统计逻辑,替代for循环:
// 替代for循环的简化写法 const count = myArray.filter(item => item === number).length;
内容的提问来源于stack exchange,提问作者DvK
相关产品推荐
相关产品推荐

