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

使用Array.filter()按参数筛选数组报错:[object Array] is not a function

问题分析:Array.filter 报错 "[object Array] is not a function"

问题描述

使用数组filter()方法时,试图通过函数参数筛选数组,但触发报错:[object Array] is not a function at Array.filter,代码如下:

function betweenArray(c, d){
    
    let filterNumbers = arr.filter(function(currentElement) {
        if (currentElement >= c && currentElement <= d)
        return currentElement 
    })

    return filterNumbers
}

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

console.log(arr.filter(betweenArray(4, 10))); // 预期输出: 4,5,6,7,8,9,10

错误原因

  1. 函数返回值类型不匹配:betweenArray函数内部直接调用arr.filter并返回了一个数组,但Array.filter()方法要求传入的参数是回调函数(返回布尔值的函数),而不是数组。当你执行betweenArray(4,10)时,它返回的是过滤后的数组,把数组传给filter()自然会报错“数组不是函数”。
  2. 回调函数逻辑不规范:原代码中filter的回调返回currentElement,虽然非0数值会被视为true,但filter的回调需要明确返回布尔值来决定元素是否保留,直接返回判断结果才是正确逻辑。

修正后的代码

function betweenArray(c, d){
    // 返回一个符合filter要求的回调函数
    return function(currentElement) {
        // 直接返回布尔值判断结果
        return currentElement >= c && currentElement <= d;
    }
}

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

console.log(arr.filter(betweenArray(4, 10))); // 输出: [4,5,6,7,8,9,10]

补充说明

  • 修正后的betweenArray是高阶函数:它接收范围参数c和d,返回一个用于filter的回调函数,这个回调函数通过闭包特性访问外部的c和d。
  • filter的回调必须返回布尔值,明确的条件判断表达式currentElement >= c && currentElement <= d直接返回true或false,逻辑清晰且符合方法要求。

内容的提问来源于stack exchange,提问作者Isaac Covarrubias

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:20:33