如何从使用$ .each()的函数返回数据

时间:2014-01-23 19:42:19

标签: javascript jquery

当我尝试return来自使用$.each()的函数的值时,我得到undefined而不是值。但是当我直接从函数返回它时,它会找到值。奇怪的行为,我不熟悉如何解决。

我在这里做了一个小提琴,这是这个问题的一个例子: JS Fiddle

    function returneach() {
        $("b").each(function(i,v){
            if(i==3) { alert('should be: ' + i); return i; }
        });    
    }
    alert('but returns: ' + returneach()); // <- undefined

我如何让它像它应该的那样工作?

5 个答案:

答案 0 :(得分:2)

这里有两个嵌套函数。

内部函数内的return不会导致外部函数返回。

使用变量并返回该变量:

function returneach() {
    var r;
    $("b").each(function(i,v){
        if(i==3) r = i;
    });
    return r; // This will either return 3 or undefined
}

答案 1 :(得分:1)

或者你可以做这样的事情

function returneach() {
    var allTags$ = $("b");


    for(var i=0; i<allTags$.length; i++ ){
            if(i==3) { 
               return i;
            }
        }
}  
alert('but returns: ' + returneach());    

答案 2 :(得分:0)

将索引分配给变量然后将其返回

function returneach() {
    var ret;
    $("b").each(function(i,v){
        if(i==3) { 
           ret = i;
        }
    });
    return ret;
}
alert('but returns: ' + returneach());

答案 3 :(得分:0)

很多时候,遍历集合涉及返回另一个集合或数组。这是显示

updated fiddle
function returneach() {
    var arr = [];
    $("b").each(function(i,v){
        if(i==3 || i == 2) { console.log('should be: ' + i); arr.push(i); }
    }); 

    return arr;
}
console.log('but returns: ' + returneach());

修改

根据评论的建议,使用$.map()添加了功能。

function returneachWithMap(){
    return $.map($('b'), function(i,v){
        if(v==3 || v == 2) { console.log('should be: ' + v); return v; };
    });    
}
console.log('but returns: ' + returneachWithMap());

此外,帖子的标题并不反映您正在使用的代码。 $.each()$(selector).each()不同。来自jQuery docs

  

$ .each()函数与$(selector).each()不同,即   用于独占迭代jQuery对象。 $ .each()   函数可用于迭代任何集合,无论它是否为   对象或数组

答案 4 :(得分:0)

您必须从returneach()

返回一个值
function returneach() {
    var retVal;
    $("b").each(function (i, v) {
        if (i == 3) {
            alert('should be: ' + i);
            retVal = i;
        }
    });
    return retVal;
}
alert('but returns: ' + returneach()); // <- undefined