我有以下构造:
注意:本例中的数组和目标只是象征性的!我知道这个例子会有更好的解决方案 - 它只是为了演示代码的构造。
var firstArray = [1,2,3,4,5];
var secondArray = [1,2,4,5];
$.each(firstArray,function(i,firstArrayElement){
$.each(secondArray,function(i,secondArrayElement){
if(firstArrayElement === secondArrayElement) {
// do stuff
// PROBLEM: force the firstArray loop to continue with the next iteration
}
});
console.log("Didn't find: "+firstArrayElement);
});
为了澄清我的问题:有没有办法强制父级 .each 继续(=跳过 console.log
)进行下一次迭代?在 PHP 中,这将是 continue 2;
。因此,目标是,如果条件为真(在本例中找到一个元素),则永远不会到达 console.log()
。
有the flag解决方案( jsFiddle ),但必须有更好的方法来做到这一点。
还有solutions with labels但标签不适用于 .each()。
所以我正在寻找的可能是一种在没有标志的父函数中使用 return
的方法。对于上面的示例,这意味着结果记录:Didn't find 3
最佳答案
$.each
方法的响应始终是被迭代的对象。如果我们能控制这一点,那就有一个选择。由于我们不能,您将无法逃脱标志解决方案。
如果您愿意删除 $.each
(至少在内部循环中),并使用 for
,这应该可以完成工作:
var firstArray = [1, 2, 3, 4, 5],
secondArray = [1, 2, 4, 5];
$.each(firstArray,function(i, firstArrayElement) {
var x = null;
for (var j = 0; j < secondArray.length; j++) {
var secondArrayElement = secondArray[j];
if (firstArrayElement === secondArrayElement) {
console.log('Do stuff');
// return false here if you wan't to break after the first match.
} else if (j + 1 == secondArray.length) {
return false;
}
}
console.log('Didn\'t find: ' + firstArrayElement);
});
关于jQuery 跳过嵌套 .each 中父循环的迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29600036/