jQuery 跳过嵌套 .each 中父循环的迭代

标签 jquery each parent

我有以下构造:

注意:本例中的数组和目标只是象征性的!我知道这个例子会有更好的解决方案 - 它只是为了演示代码的构造。

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);
});

jsFiddle

为了澄清我的问题:有没有办法强制父级 .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/

相关文章:

javascript - 在 jquery 中的最后一个文本之后添加字符串

ruby - 为什么这个 .each block 返回的结果与 .select 不同?

每个函数内的 JQuery 队列/延迟()

php - PHP中的父::父

javascript json为每个当前元素创建父元素

javascript - Jquery slidedown if 语句不比较 $(this)

javascript - 使用 Angular 传递的数据更新模态

javascript - 如何在三个div之间切换?可能使用 jquery 解决方案?

javascript - jQuery 给定 div 中每个元素的类

MySQL:仅在找到子项时添加父行(使用 LIKE,同一张表)