javascript - 嵌套 if 语句的编程逻辑

标签 javascript arrays loops

尝试将一些非常重复的代码重写为某种循环,并弄清楚其中的逻辑,这让我的大脑有些煎熬。

原始代码看起来有点像这样:

if(a){
    if(b == "foo1"){
        if($('#foo2').val() == a || $('#foo3').val() == a || $('#foo4').val() == a || $('#foo5').val() == a || $('#foo6').val() == a){
            //do something here
        }
    }
}
if(a){
    if(b == "foo2"){
        if($('#foo1').val() == a || $('#foo3').val() == a || $('#foo4').val() == a || $('#foo5').val() == a || $('#foo6').val() == a){
            //do something here
        }
    }
}
if(a){
    if(b == "foo3"){
        if($('#foo1').val() == a || $('#foo2').val() == a || $('#foo4').val() == a || $('#foo5').val() == a || $('#foo6').val() == a){
            //do something here
        }
    }
}
if(a){
    if(b == "foo4"){
        if($('#foo1').val() == a || $('#foo2').val() == a || $('#foo3').val() == a || $('#foo5').val() == a || $('#foo6').val() == a){
            //do something here
        }
    }
}
 if(b == "foo5"){
        if($('#foo1').val() == a || $('#foo2').val() == a || $('#foo3').val() == a || $('#foo4').val() == a || $('#foo6').val() == a){
            //do something here
        }
    }
}
if(b == "foo6"){
        if($('#foo1').val() == a || $('#foo2').val() == a || $('#foo3').val() == a || $('#foo4').val() == a || $('#foo5').val() == a){
            //do something here
        }
    }
}

我想将其重写为一个循环(或多个循环),但正在努力使逻辑正确。

到目前为止,我有这个:

if (a){
    for (i=0; i < 6; i++){
        var fieldNames =[ "foo1", "foo2", "foo3", "foo4", "foo5", "foo6"]
        console.log("i loop "+ fieldNames[i]);
        if(b == fieldNames[i]){
            for (j = 1; j < fieldNames.length; j++){
                if($('#'+fieldNames[j]).val() == a){
                     //do something here
                     }
                  }
               }
         }
    }

我知道这是不对的,但是任何人都可以帮助我了解逻辑应该是什么吗?

谢谢

编辑:

应阐明变量所指的内容。

此函数通过 onblur 事件上的元素内联调用 doCheck(this.value, 'foo1') 行(此示例仅涉及第一个实例,第二个实例的 b 输入为 foo2,第三个实例的 b 输入为 foo3,依此类推...

完整的函数如下所示:

function doCheck(a,b)
  if (a){
    for (i=0; i < 6; i++){
    var fieldNames =[ "foo1", "foo2", "foo3", "foo4", "foo5", "foo6"]
    console.log("i loop "+ fieldNames[i]);
    if(b == fieldNames[i]){
        for (j = 1; j < fieldNames.length; j++){
            if($('#'+fieldNames[j]).val() == a){
                 //do something here
                 }
              }
           }
     }
  }
}

所以变量 a是 select 元素中的值,而 b变量是字段名称。

最佳答案

您可以生成可能字段的列表,从该列表中删除 b,然后与其余字段进行比较。

if (a) {
    var fieldNames = ['foo1', 'foo2', 'foo3', 'foo4', 'foo5', 'foo6'];
    // Remove b from the fields
    fieldNames.splice(fieldNames.indexOf(b), 1);
    var doSomething = fieldNames.reduce(function(prev, fieldName) {
        return prev && $('#' + fieldName).val() === a;
    }, true);
    if (doSomething) {
      // do something
    }
}

另一种看待这个问题的方式是这样的:

if (a) {
  var fieldNames = ['foo1', 'foo2', 'foo3', 'foo4', 'foo5', 'foo6'];
  // Remove b from the fields
  fieldNames.splice(fieldNames.indexOf(b), 1);
  var doSomething = true;
  for (var i = 0; i < fieldNames.length; i++) {
    if ($('#' + fieldNames[i]).val() !== a) {
      doSomething = false;
      break;
    }
  }

  if (doSomething) {
    // do something
  }
}

关于javascript - 嵌套 if 语句的编程逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31032037/

相关文章:

arrays - 数组索引为宽数组

ruby - 将数组中除选定单词外的每个单词大写

javascript - JQuery 停止/暂停 for 循环中播放的声音

r - 遍历数据框并根据条件更改值 [R]

javascript - 使用 jquery-pjax 时如何强制一个链接进行整页加载

javascript - 当模板更改时停止观察更改

javascript - 如何滚动到单击时移出屏幕的 div

Javascript $q Promise 请求覆盖还是堆栈?

java - CompareTo 方法如何与 array.sort 一起使用来对数组进行排序?

c - 扫描验证