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

为何jQuery $.each()函数返回值不符合预期?

问题:jQuery $.each()迭代导致函数返回值不符合预期

现象描述

编写的jQuery函数无法返回预期值:控制台打印出"FOUND",说明已匹配到目标项,但函数最终返回false;改用原生for循环实现相同逻辑,却能正常返回目标值。且确认$.each()是同步执行的,控制台输出顺序正常。

有问题的$.each()实现代码

function getValueFromSettingArray(array,key){
    if(array && array.length > 0){
        console.log("Setting Array Greater Than 0",array);
        $.each(array, function(index,item){
            console.log(index,item);
            if(item.name == key){
                console.log("FOUND",item.value);
                return item.value;
            }
        });
    }

    return false;
}

正常的for循环实现代码

function getValueFromSettingArray(array,key){
    if(array && array.length > 0){
        console.log("Setting Array Greater Than 0",array);
        for(let i=0; i < array.length; i++){
            let item = array[i];
            console.log("item loop " + i, item);
            if(item.name == key){
                console.log("FOUND",item.value);
                return item.value;
            }
        }
    }

    return false;
}

问题根源

核心错误是混淆了$.each()迭代回调的return作用范围:

  • 在$.each()的回调函数里,return item.value并不是返回给外层的getValueFromSettingArray函数,而是返回给$.each()方法本身。$.each()会根据回调的返回值决定是否继续迭代——返回false终止迭代,返回其他值则继续,但这个返回值不会传递到外层函数。
  • 因此,外层函数在执行完$.each()后,会继续执行到末尾的return false,最终返回false。
  • 而for循环中的return是直接作用于外层函数,找到匹配项后会立刻终止函数并返回目标值,所以符合预期。

补充说明:此问题曾被标记为重复,但核心并非询问数组取值方法,而是探究结果不符合预期的原因,经提示后明确了回调函数return的作用范围才是问题关键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:43:13