JS自定义filterRange函数无法正确返回数组结果如何解决
问题根因
你的代码返回字符串而非预期数组,核心存在两个错误:
- 对数组使用
+=运算符时,JavaScript会触发隐式类型转换,先把空数组转为空字符串,再把后续匹配到的数字逐个拼接到字符串上,最终返回拼接后的字符串,这就是你得到"57""13""435"这类结果的直接原因。 newArr声明时未加变量关键字,会泄漏为全局变量,属于不规范写法。- 错误使用字符串拼接的语法操作数组,没有遵循数组的元素写入逻辑。
修正代码(不依赖任何数组内置方法)
按照不使用内置函数的要求,不调用push等内置API,直接通过索引下标写入元素即可:
function filterRange(arr, min, max){ var newArr = []; // 维护新数组的写入位置下标 var insertPos = 0; for(var i = 0; i < arr.length; i++){ if(arr[i] > min && arr[i] < max) { // 直接通过索引给数组赋值,无内置方法调用 newArr[insertPos] = arr[i]; insertPos++; } } return newArr; } // 测试运行结果 filterRange([1,3,5,7,10], 4, 8); // 返回 [5,7] filterRange([1,3,5,7,10], -1, 4); // 返回 [1,3] filterRange([2,4,3,5], 2, 6); // 返回 [4,3,5]
注意事项
- 数组是复合类型,不要用
+=这类算术运算符操作,否则会触发非预期的隐式类型转换。 - 所有局部变量必须加声明关键字,避免污染全局作用域。
- 不使用内置方法的场景下,通过索引读写数组元素是最基础的实现方式,完全满足题目要求。
内容的提问来源于stack exchange,提问作者tas234d
相关产品推荐
相关产品推荐

