如何在jQuery.each() util跳转到下一次迭代?

我要遍历一个元素数组。jQuery的文档说:

jquery.Each()文档

返回非false与for循环中的continue语句相同,它将立即跳到下一个迭代。

我尝试调用'return non-false;'和'non-false;' (sans return)它们都不会跳到下一个迭代。相反,他们打破了循环。我错过了什么?

271762 次浏览

非假的意思是:

return true;

这段代码:

var arr = ["one", "two", "three", "four", "five"];
$.each(arr, function(i) {
if (arr[i] == 'three') {
return true;
}
console.log(arr[i]);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

will log one, two, four, five.

通过'return non-false',他们的意思是返回任何不会被计算为布尔false的值。所以你可以返回true1'non-false',或者任何你能想到的东西。

Javascript有“真实”和“虚假”的概念。如果一个变量有一个值,那么通常(正如你将看到的)它有“真实”- null,或没有值倾向于“虚假”。下面的代码片段可能会有所帮助:

var temp1;
if ( temp1 )...  // false


var temp2 = true;
if ( temp2 )...  // true


var temp3 = "";
if ( temp3 ).... // false


var temp4 = "hello world";
if ( temp4 )...  // true

希望这有帮助?

另外,值得一看Douglas Crockford的这些视频

更新:感谢@cphpython发现损坏的链接-我已经更新到指向工作版本

Javascript语言

Javascript - The Good Parts

不要忘记,有时候你可能只是从块的末端掉下来,进入下一个迭代:

$(".row").each( function() {
if ( ! leaveTheLoop ) {
... do stuff here ...
}
});

而不是像这样返回:

$(".row").each( function() {
if ( leaveTheLoop )
return; //go to next iteration in .each()
... do stuff here ...
});

jQuery.noop ()可以帮助

$(".row").each( function() {
if (skipIteration) {
$.noop()
}
else{doSomething}
});

如果你直接返回false,循环只有就会中断。例:

// this is how jquery calls your function
// notice hard comparison (===) against false
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
break;
}

这意味着你可以返回任何其他内容,包括undefined,如果你不返回任何内容,则返回undefined,因此你可以简单地使用空return语句:

$.each(collection, function (index, item) {
if (!someTestCondition)
return; // go to next iteration


// otherwise do something
});

这可能会因版本而异;这适用于jquery 1.12.4。但实际上,当你从函数底部退出时,你也没有返回任何东西,这就是循环继续的原因,所以我预计无论如何不返回任何东西都不会继续循环。除非他们想强迫每个人开始返回一些东西来保持循环继续,否则不返回作为一种保持循环继续的方式。