JavaScript:实现数字数组提取正数的现有代码排错与修改
原代码存在的问题
- for循环语法错误:循环行尾误加了分号,导致循环绑定空语句为循环体,后续处理数组的花括号块完全脱离循环逻辑。循环空跑结束后,计数器i的值等于数组长度,此时取数组元素只会拿到undefined,最终返回的正数数组永远为空。
- 打印方法不符合使用场景:代码末尾使用的
print(positive)实际等价于调用浏览器内置的window.print(),作用是弹出系统打印对话框打印当前页面,既不会接收传入的参数,也达不到把数组内容输出调试的预期效果。 - 可读性隐患:数组分割的部分使用了反人类的模板标签写法(
all.split`,`.map(...)),虽然语法上能跑,但逻辑晦涩,后续维护成本极高。 - 隐式全局变量:开头的
all变量没有用关键字声明,非严格模式下会挂载到全局window对象,容易造成命名冲突。
基于原有代码的修改方案
直接对原有错误点做调整,不修改整体实现逻辑:
// 为all变量补充var声明,消除全局污染 var all = prompt("Give me an array of numbers seperated by ','"); // 替换可读性极差的模板标签写法为常规split调用 var splitted = all.split(',').map(x=>+x); function returner(splitted){ var positive = []; // 删除for循环行尾多余的分号,让数组处理逻辑正常进入循环体 for(var i = 0; i < splitted.length; i++){ var el = splitted[i]; if (el >= 0){ positive.push(el); } } return positive; } var positive = returner(splitted); // 替换为浏览器兼容的调试打印方法 console.log(positive);
内容的提问来源于stack exchange,提问作者Yeralkhan Slam
相关产品推荐
相关产品推荐

