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

时间:2015-08-05 19:11:26

标签: javascript java jquery if-statement for-loop

如何在if条件下执行两个变量?在这里,我有其他几个ifs,我想要100个ifs!有更短的方式吗?

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

在这里,我有其他几个ifs,我想要100个ifs!有更短的方式吗?我有一个动态表的动态表。当我的表有5行代码正在工作时,但是当我有更多的代码工作时。

3 个答案:

答案 0 :(得分:2)

您正在寻找的是一个嵌套循环。你基本上可以在循环中编写一个循环。 (实际上你想要多少。虽然它可以快速变丑。)

考虑你的循环结构:

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开始内循环来实现这一点。正如你的逻辑所做的那样。)

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

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

答案 1 :(得分:2)

我不懂那种语言。但数据和控制结构是任何语言的数据和控制结构。

通过以下方式替换你的for循环:

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

答案 2 :(得分:1)

  

非常感谢你的想法!

     

对代码进行一些小改动就像天堂一样!

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