You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从多类型元素数组筛选同类型元素?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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 18:40:33