javascript - 编写一长串 if-else-if 的简短方法?

标签 javascript java jquery if-statement for-loop

如何在 if 条件中执行两个变量?这里我有几个 else if,但我想要 100 个 else if!有没有更短的方法?

$(document).on('click', '.btn-next', function () {
    var z = [];
    var recipientsArray = z.sort();
    var zDuplicate = [];
    $('option:selected.exclude_global').each(function() {
    z.push($(this).val())});
    for (var i = 0; i < recipientsArray.length - 1; i++) {
    if (recipientsArray[i + 1] == recipientsArray[i]) {
    zDuplicate.push(recipientsArray[i]);
    }else if(recipientsArray[i + 2] == recipientsArray[i]){
    zDuplicate.push(recipientsArray[i]);
    }else if(recipientsArray[i + 3] == recipientsArray[i]){
    zDuplicate.push(recipientsArray[i]);
    }else if(recipientsArray[i + 4] == recipientsArray[i]){
    zDuplicate.push(recipientsArray[i]);
    }

    }
    if(zDuplicate.length>>0){
        alert("Global Filter Already Exists");
        event.preventDefault();
    }
});

这里我有几个 else if,但我想要 100 个 else if!有更短的路吗?我有一个带有动态行的动态表。当我的表有 5 行时,代码可以正常工作,但是当我的表有 5 行时,代码就无法工作。

最佳答案

您正在寻找的称为嵌套循环。基本上,您可以在循环中编写循环。 (实际上,你想要多少就多少。尽管它很快就会变得丑陋。)

考虑你的循环结构:

for (var i = 0; i < recipientsArray.length - 1; i++) {
    // check if recipientsArray[i] equals any other element
}

好吧,这只是另一个循环:

for (var i = 0; i < recipientsArray.length - 1; i++) {
    for (var j = i + 1; j < recipientsArray.length - 1; j++) {
        if (recipientsArray[j] == recipientsArray[i]) {
            zDuplicate.push(recipientsArray[i]);
            break;
        }
    }
}

请注意,可能有一种更有效的方法来检查重复项。 (特别是如果集合已排序。)至少我改变了逻辑,这样您就不会重新比较已经进行的比较。 (我通过在 i + 1 处启动内部循环来实现此目的,而不是像您的逻辑那样在 1 处启动。)

我还认为我已经通过使用break语句复制了您的else if结果。因为您的 else if 逻辑基本上意味着“一旦找到一个,就停止寻找”。这就是这个 break 应该做的事情,或者至少是打算做的事情,但您需要测试一下。如果没有(嵌套有时会令人困惑,这就是为什么应该小心地完成)那么你可能可以 make use of labels达到同样的效果。

<小时/>

最终,无论您如何实现,概念都是相同的。您询问如何迭代数组中的多个值。这就是循环的用途。

关于javascript - 编写一长串 if-else-if 的简短方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31840918/

相关文章:

javascript - 选择的更改事件引发 "jQuery is not a function"错误

jquery - 如何使用 HTML5 ondrag 事件改变元素的位置?

javascript - 如何在XDR请求中指定dataType?

javascript - 在 jQuery 中使用回调函数无限递归

java - UrlConnection 无内容类型

java - 我可以防止 JDialog 在按下转义/输入键时关闭吗?

javascript - TS2307 : Cannot find module 'angular2/core' while importing Angular2 on TypeScript

javascript - 返回数组中的第一个重复数字

Java:使用 lambda 表达式对数组进行排序?

jquery - 从 ASP.NET MVC ActionResult 返回 bool