如何从多类型元素数组筛选同类型元素?JS函数输出null问题
如何从混合类型数组中筛选指定类型元素并生成新数组
你的代码存在多个逻辑和语法问题,导致输出不符合预期,下面逐个说明问题并给出修正方案:
代码中的核心问题
- 循环结构与变量作用域错误:for循环未加花括号,导致只有
var string = [];在循环体内执行,每次循环都会重置数组;且三个类型数组声明在循环内,无法累积筛选结果。 - 赋值与比较运算符混淆:判断条件里用了
type = 'string'(赋值操作)而非type === 'string'(全等比较),这会强制修改type的值,导致判断逻辑完全混乱。 - return语句逻辑错误:
return string, number, boolean;使用逗号运算符,最终只会返回最后一个变量boolean;且遇到不匹配类型时直接return 'null',会提前终止函数,无法完成整个数组的遍历。 - 变量重复声明:循环内重新声明
var i;,覆盖了循环计数器,导致遍历逻辑异常。
修正后的基础版本代码
function dataTypeArray(arr, type) { // 初始化结果数组 const result = []; // 遍历输入数组,用let声明计数器避免全局污染 for(let i = 0; i < arr.length; i++) { // 用全等比较判断元素类型是否匹配 if(typeof arr[i] === type) { result.push(arr[i]); } } // 返回筛选后的数组,无匹配元素则返回空数组 return result; } var arr = ['hhg', 'fthth', 456, true]; console.log(dataTypeArray(arr, 'string')); // 输出: ['hhg', 'fthth']
更简洁的写法(使用数组filter方法)
利用JavaScript数组内置的filter方法,可以大幅简化代码:
function dataTypeArray(arr, type) { return arr.filter(item => typeof item === type); } var arr = ['hhg', 'fthth', 456, true]; console.log(dataTypeArray(arr, 'string')); // 输出: ['hhg', 'fthth']
filter方法会自动遍历数组,返回所有满足typeof item === type条件的元素组成的新数组,代码更简洁易读。
内容的提问来源于stack exchange,提问作者Terra
相关产品推荐
相关产品推荐

