如何突破.each()并返回函数的值

时间:2010-10-15 21:43:25

标签: javascript jquery

我想使用return false来破坏.each()但同时返回一个值。我怎么能这样做?

请参阅解决方法以了解我要做的事情:

function HasStores(state) {
    var statehasstores = false;

    $(stores).each(function (index, store) {
        if (state == store.state && store.category == "meyers") {
            statehasstores = true;
            return false;  // break
        }
    });

    return statehasstores;
}

在伪代码中我喜欢做的是:

Function () {
    for() {
        if found {
            return true;
        }   
    }
    return false;
}

8 个答案:

答案 0 :(得分:43)

你做对了......

来自http://api.jquery.com/each/

“我们可以通过返回false来停止回调函数中的循环。”

答案 1 :(得分:14)

有创意:

try {
  $(stores).each(function (index, store) {
    if(state == store.state && store.category == "meyers"){
      throw store;
    }
  });
}
catch(e) {
  // you got e with the value
}

不,我只是在开玩笑,不要用这个:)。这是我喜欢分享的想法。

答案 2 :(得分:11)

在循环外部使用变量来获取值并在之后使用它。

var value;

$(stores).each(function (index, store) {
    if(state == store.state && store.category == "meyers"){
        statehasstores = true;
        value = store; // added line
        return false; //break
    }
});

alert(value);

你做的方式很好。的 I've tested on jsFiddle, see an example here

这不适合你吗?你能展示更多背景吗?

答案 3 :(得分:5)

或者,您可以使用for循环代替each(),只返回值。

答案 4 :(得分:2)

你所建议的是这样做的方法。我认为它不是一种解决方法,而是一种习惯用语。

答案 5 :(得分:1)

好吧,我想我们对这一点有点怀疑所以也许我在这里做得更清楚:

  • 当jquery doc说:"我们可以通过返回false来停止回调函数中的循环。"你这样做:

    Function(){ for(){     如果找到{         返回true;     }
    } 返回false; }

这并不意味着当找到搜索到的元素时,您的函数将返回true。相反,它总是返回false。

所以为了让你的功能正常工作,我建议你这样做:

Function () {
   variable found = false;
foreach() {
    if found {
        found = true;
        return false; // This statement doesn't make your function return false but just cut the loop
    }   
}
return found;

}

当然还有很多其他方法可以执行此操作,但我认为这是最简单的方法。

Coopa - 简单!

答案 6 :(得分:0)

正如其他人从jQuery Each注意到的那样,返回false只会从循环中断开而不返回值,返回true但会“继续”并立即开始下一次迭代。有了这些知识,您可以在某种程度上简化代码:

function HasStores(state) {
  var statehasstores = false;

  $(stores).each(function (index, store){

    // continue or break;
    statehasstores = !(state == store.state && store.category == "meyers"))
    return statehasstores;
  });

  return !statehasstores;
}

这当然使用双重否定有点愚蠢,并且具有为每个错误迭代保存'true'到statehasstores的副作用,反之亦然,但是最终结果应该是相同的,如果你不再拥有它言。

答案 7 :(得分:0)

怎么样:

$.each(...

PS我最初对std::array实际返回的内容感兴趣。正如它在relevant JQ page上所说的那样,“该方法返回其第一个参数,即迭代的对象”,但实际上解决方案甚至不要求您使用该事实......

PPS需要一个返回值的函数吗?当然包裹在外部功能中。