我想使用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;
}
答案 0 :(得分:43)
答案 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需要一个返回值的函数吗?当然包裹在外部功能中。