使用原生JS移除数组非数字元素并合并的功能实现问题求助
错误原因
- 你写的
filt函数存在逻辑缺陷:用forEach遍历数组时直接splice删除元素,会让数组的长度实时变短,后续遍历的索引会自动后移,导致被删元素后面的第一个元素直接跳过检查,过滤不完全。 - 这种边遍历边修改原数组的写法还会改动你传入的原始数组,可能引发其他意料之外的问题。
修复方案
直接用数组原生的filter方法实现过滤逻辑即可,简洁且不会出现上述问题:
function combineArray(arr1, arr2) { // 过滤仅保留数字类型元素 const filterNumbers = arr => arr.filter(item => typeof item === 'number') // 合并两个过滤后的数组返回 return filterNumbers(arr1).concat(filterNumbers(arr2)) }
可选调整
如果你的需求允许保留纯数字组成的字符串元素(比如'123'这类值也需要保留),可以把过滤条件修改为:
const filterNumbers = arr => arr.filter(item => !isNaN(Number(item)))
内容的提问来源于stack exchange,提问作者Myroslava
相关产品推荐
相关产品推荐

