数组检测函数字符串计数器冗余输出问题及替代实现方案咨询
问题修复与优化方案
先解决你当前的核心问题:计数器重复输出
你的代码里,每次找到字符串类型的元素时都会执行document.write(" " + tip + "<br>");,这就是为什么每匹配一个字符串就会输出一次计数器值。只需要把这行代码从if (value === "string")的代码块里移除就可以了——因为你只需要在循环结束后输出总字符串数量,而不是每次计数时都输出。
另外,你需求里提到要输出「数组本身」,原来的代码没实现这一点,我也帮你补上了。
修复后的完整代码:
var sir = ["water", 3, true, false, "dog"]; function verificare() { // 输出数组本身 document.write("Array: " + JSON.stringify(sir) + "<br>"); var lungimesir = sir.length; document.write("This is the length of the array: " + lungimesir + "<br>"); var tip = 0; for (var i = 0; i < sir.length; i++) { var value = typeof(sir[i]); document.write("Element at index " + i + " type: " + value + "<br>"); if (value === "string") { tip = tip + 1; // 移除这里的document.write,避免每次计数都输出 } } document.write("The number of strings found is: " + tip + "<br>"); if (tip === lungimesir) { document.write("The array contains only strings<br>"); } else { document.write("The array is mixed<br>"); } } verificare();
更简洁的现代JavaScript实现方式
如果你想让代码更易读、更简洁,可以使用ES6的数组高阶函数(forEach、filter、every)来实现,这些方法能让逻辑更清晰,还能避免依赖全局变量(把数组作为参数传入函数):
const sir = ["water", 3, true, false, "dog"]; function verificare(arr) { // 输出数组本身 document.write("Array: " + JSON.stringify(arr) + "<br>"); // 输出数组长度 const arrLength = arr.length; document.write("Array length: " + arrLength + "<br>"); // 输出每个元素的类型 arr.forEach((item, index) => { const itemType = typeof item; document.write(`Element at index ${index} type: ${itemType}<br>`); }); // 统计字符串数量 const stringCount = arr.filter(item => typeof item === "string").length; document.write("Number of strings: " + stringCount + "<br>"); // 判断是否仅包含字符串 const isOnlyStrings = arr.every(item => typeof item === "string"); document.write(isOnlyStrings ? "The array contains only strings<br>" : "The array is mixed<br>"); } verificare(sir);
代码说明:
forEach:遍历数组,逐个输出元素的索引和类型filter:筛选出所有字符串类型的元素,然后取length得到字符串数量every:检查数组中所有元素是否都是字符串,返回布尔值
这种写法更符合现代JS的编码习惯,逻辑也更直观,维护起来更方便。
内容的提问来源于stack exchange,提问作者moonhowl
相关产品推荐
相关产品推荐

