是否有更简单的方法来解决其他多个问题?

时间:2019-08-10 17:45:18

标签: javascript html

我试图基于两个值生成结果,这两个值都是应用于多个输入字段的公式的结果。

我基本上已经成功创建了多个if / else语句,并且首先消除了最小值。

现在,如果/ else函数是大约40〜50行代码,则只是这个“简单”。由于缺乏知识,我无法找到更好的解决方案。我希望有人能指出我的方向。

我试图研究从数组中进行选择,但是我不认为这是解决我的问题的方法,因为没有1个值,但需要2个值。

if (document.getElementById('reserve').checked == false) {
      if (capaciteit_te < 1.01 && max_opvoer_clc < 4.01) {
        document.getElementById('advies').innerHTML = pomp1
      } else {
        if (capaciteit_te < 2.01 && max_opvoer_clc < 3.01) {
          document.getElementById('advies').innerHTML = pomp1
        } else {
          if (capaciteit_te < 3.01 && max_opvoer_clc < 2.01) {
            document.getElementById('advies').innerHTML = pomp1
          } else {
            if (capaciteit_te < 4.01 && max_opvoer_clc < 1.01) {
              document.getElementById('advies').innerHTML = pomp1
            } else {
              if (capaciteit_te < 1.01 && max_opvoer_clc < 6.01) {
                document.getElementById('advies').innerHTML = pomp2
              } else {
                if (capaciteit_te < 2.01 && max_opvoer_clc < 6.01) {
                  document.getElementById('advies').innerHTML = pomp2
                } else {
                  if (capaciteit_te < 3.01 && max_opvoer_clc < 5.01) {
                    document.getElementById('advies').innerHTML = pomp2
                  } else {
                    if (capaciteit_te < 3.01 && max_opvoer_clc < 6.01) {
                      document.getElementById('advies').innerHTML = pomp3
                    } else {
                      if (capaciteit_te < 4.01 && max_opvoer_clc < 4.01) {
                        document.getElementById('advies').innerHTML = pomp2
                      } else {
                        if (capaciteit_te < 5.01 && max_opvoer_clc < 3.01) {
                          document.getElementById('advies').innerHTML = pomp2
                        } else {
                          if (capaciteit_te < 6.01 && max_opvoer_clc < 2.01) {
                            document.getElementById('advies').innerHTML = pomp2
                          } else {
                            if (capaciteit_te < 5.01 && max_opvoer_clc < 5.01) {
                              document.getElementById('advies').innerHTML = pomp3
                            } else {
                              if (capaciteit_te < 6.01 && max_opvoer_clc < 5.01) {
                                document.getElementById('advies').innerHTML = pomp3
                              } else {
                                if (capaciteit_te < 8.01 && max_opvoer_clc < 4.01) {
                                  document.getElementById('advies').innerHTML = pomp3
                                } else {
                                  if (capaciteit_te < 10.01 && max_opvoer_clc < 3.01) {
                                    document.getElementById('advies').innerHTML = pomp3
                                  } else {
                                    if (capaciteit_te < 11.01 && max_opvoer_clc < 2.01) {
                                      document.getElementById('advies').innerHTML = pomp3
                                    } else {
                                      if (capaciteit_te < 16.01 && max_opvoer_clc < 2.01) {
                                        document.getElementById('advies').innerHTML = pomp4
                                      } else {
                                        if (capaciteit_te < 20.01 && max_opvoer_clc < 1.01) {
                                          document.getElementById('advies').innerHTML = pomp4
                                        } else {
                                          if (capaciteit_te < 10.01 && max_opvoer_clc < 4.01) {
                                            document.getElementById('advies').innerHTML = pomp5
                                          } else {
                                            if (capaciteit_te < 16.01 && max_opvoer_clc < 3.01) {
                                              document.getElementById('advies').innerHTML = pomp5
                                            } else {
                                              if (capaciteit_te < 20.01 && max_opvoer_clc < 2.01) {
                                                document.getElementById('advies').innerHTML = pomp5
                                              }
                                              if (capaciteit_te < 6.01 && max_opvoer_clc < 6.01) {
                                                document.getElementById('advies').innerHTML = pomp6
                                              } else {
                                                if (capaciteit_te < 11.01 && max_opvoer_clc < 5.01) {
                                                  document.getElementById('advies').innerHTML = pomp6
                                                } else {
                                                  if (capaciteit_te < 16.01 && max_opvoer_clc < 4.01) {
                                                    document.getElementById('advies').innerHTML = pomp6
                                                  } else {
                                                    if (capaciteit_te < 20.01 && max_opvoer_clc < 3.01) {
                                                      document.getElementById('advies').innerHTML = pomp6
                                                    } else {
                                                      if (capaciteit_te < 18.01 && max_opvoer_clc < 6.01) {
                                                        document.getElementById('advies').innerHTML = pomp8
                                                      } else {
                                                        if (capaciteit_te < 20.01 && max_opvoer_clc < 5.01) {
                                                          document.getElementById('advies').innerHTML = pomp8
                                                        } else {
                                                          if (capaciteit_te < 20.01 && max_opvoer_clc < 6.01) {
                                                            document.getElementById('advies').innerHTML = pomp12
                                                          } else {
                                                            document.getElementById('advies').innerHTML = "Geen bijpassende pomp gevonden, meem contact met DAB op om te kijken welke pomp voor u geschikt is"
                                                          }
                                                        }
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    } else {document.getElementById('advies').innerHTML = "Reserve pomp nog niet geimplementeerd"}

该功能有效,但我希望使用其他方法

7 个答案:

答案 0 :(得分:6)

为您的3个“值”使用数组,并对其进行迭代。 以下是一个示例,希望很清楚。

const capaciteit_te = 0.5;
const max_opvoer_clc = 2.5;

const a = [
  [ 1.01, 4.01, "pomp1" ],
  [ 2.01, 3.01, "pomp1" ],
  [ 3.01, 2.01, "pomp1" ],
  [ 4.01, 1.01, "pomp1" ],
  [ 1.01, 6.01, "pomp2" ]
];

let found = false;

for (let i = 0; i < a.length; i++) {
  const b = a[i];
  if (capaciteit_te < b[0] && max_opvoer_clc < b[1]) {
    console.log(b[2]);
    found = true;
    break;
  }
}

if (!found) {
  console.log("not found!");
}

答案 1 :(得分:1)

至少要使它更好的一个选择是拆分查找提示并进行DOM交互(设置元素)

赞:

<main></main>
<template id="my-template">
  <style>
    h2 { color: green; }
  </style>
  
  <h2>I'm in Shadow DOM.</h2>

</template>

function findAdvies(capaciteit_te, max_opvoer_clc) {
    if (capaciteit_te < 1.01 && max_opvoer_clc < 4.01)
        return pomp1
    if (capaciteit_te < 2.01 && max_opvoer_clc < 3.01)
        return pomp1
    if (capaciteit_te < 3.01 && max_opvoer_clc < 2.01)
        return pomp1
    if (capaciteit_te < 4.01 && max_opvoer_clc < 1.01)
        return pomp1
    if (capaciteit_te < 1.01 && max_opvoer_clc < 6.01)
        return pomp2
    if (capaciteit_te < 2.01 && max_opvoer_clc < 6.01)
        return pomp2
    if (capaciteit_te < 3.01 && max_opvoer_clc < 5.01)
        return pomp2
    if (capaciteit_te < 3.01 && max_opvoer_clc < 6.01)
        return pomp3
    if (capaciteit_te < 4.01 && max_opvoer_clc < 4.01)
        return pomp2
    if (capaciteit_te < 5.01 && max_opvoer_clc < 3.01)
        return pomp2
    if (capaciteit_te < 6.01 && max_opvoer_clc < 2.01)
        return pomp2
    if (capaciteit_te < 5.01 && max_opvoer_clc < 5.01)
        return pomp3
    if (capaciteit_te < 6.01 && max_opvoer_clc < 5.01)
        return pomp3
    if (capaciteit_te < 8.01 && max_opvoer_clc < 4.01)
        return pomp3
    if (capaciteit_te < 10.01 && max_opvoer_clc < 3.01)
        return pomp3
    if (capaciteit_te < 11.01 && max_opvoer_clc < 2.01)
        return pomp3
    if (capaciteit_te < 16.01 && max_opvoer_clc < 2.01)
        return pomp4
    if (capaciteit_te < 20.01 && max_opvoer_clc < 1.01)
        return pomp4
    if (capaciteit_te < 10.01 && max_opvoer_clc < 4.01)
        return pomp5
    if (capaciteit_te < 16.01 && max_opvoer_clc < 3.01)
        return pomp5
    if (capaciteit_te < 20.01 && max_opvoer_clc < 2.01)
        return pomp5
    if (capaciteit_te < 6.01 && max_opvoer_clc < 6.01)
        return pomp6
    if (capaciteit_te < 11.01 && max_opvoer_clc < 5.01)
        return pomp6
    if (capaciteit_te < 16.01 && max_opvoer_clc < 4.01)
        return pomp6
    if (capaciteit_te < 20.01 && max_opvoer_clc < 3.01)
        return pomp6
    if (capaciteit_te < 18.01 && max_opvoer_clc < 6.01)
        return pomp8
    if (capaciteit_te < 20.01 && max_opvoer_clc < 5.01)
        return pomp8
    if (capaciteit_te < 20.01 && max_opvoer_clc < 6.01)
        return pomp12

    return "Geen bijpassende pomp gevonden, meem contact met DAB op om te kijken welke pomp voor u geschikt is"
}

因为我们if (document.getElementById('reserve').checked == false) { var advies = findAdvies(capaciteit_te, max_opvoer_clc); document.getElementById('advies').innerHTML = advies; } 很早,所以我们不需要嵌套,甚至不需要大括号:)

下一步是使“ findAdvies”更容易/更短-但是,如果没有更多的领域知识(没有储备工程),这将有点困难

答案 2 :(得分:1)

另一种方式是:

if (document.getElementById('reserve').checked == false) {
if (capaciteit_te < 1.01 && max_opvoer_clc < 4.01 ||
    capaciteit_te < 2.01 && max_opvoer_clc < 3.01 ||
    capaciteit_te < 3.01 && max_opvoer_clc < 2.01 ||
    capaciteit_te < 4.01 && max_opvoer_clc < 1.01) {
    document.getElementById('advies').innerHTML = pomp1;
}
else if (capaciteit_te < 1.01 && max_opvoer_clc < 6.01 ||
    capaciteit_te < 2.01 && max_opvoer_clc < 6.01 ||
    capaciteit_te < 3.01 && max_opvoer_clc < 5.01 ||
    capaciteit_te < 4.01 && max_opvoer_clc < 4.01 ||
    capaciteit_te < 5.01 && max_opvoer_clc < 3.01 ||
    capaciteit_te < 6.01 && max_opvoer_clc < 2.01) {
    document.getElementById('advies').innerHTML = pomp2;
}
else if (capaciteit_te < 3.01 && max_opvoer_clc < 6.01 ||
    capaciteit_te < 5.01 && max_opvoer_clc < 5.01 ||
    capaciteit_te < 6.01 && max_opvoer_clc < 5.01 ||
    capaciteit_te < 8.01 && max_opvoer_clc < 4.01 ||
    capaciteit_te < 10.01 && max_opvoer_clc < 3.01 ||
    capaciteit_te < 11.01 && max_opvoer_clc < 2.01) {
    document.getElementById('advies').innerHTML = pomp3;
}
else if (capaciteit_te < 16.01 && max_opvoer_clc < 2.01 ||
    capaciteit_te < 20.01 && max_opvoer_clc < 1.01) {
    document.getElementById('advies').innerHTML = pomp4;
}
else if (capaciteit_te < 10.01 && max_opvoer_clc < 4.01 ||
    capaciteit_te < 16.01 && max_opvoer_clc < 3.01 ||
    capaciteit_te < 20.01 && max_opvoer_clc < 2.01) {
    document.getElementById('advies').innerHTML = pomp5;
}
else if (capaciteit_te < 6.01 && max_opvoer_clc < 6.01 ||
    capaciteit_te < 11.01 && max_opvoer_clc < 5.01 ||
    capaciteit_te < 16.01 && max_opvoer_clc < 4.01 ||
    capaciteit_te < 20.01 && max_opvoer_clc < 3.01) {
    document.getElementById('advies').innerHTML = pomp6;
}
else if (capaciteit_te < 18.01 && max_opvoer_clc < 6.01 ||
    capaciteit_te < 20.01 && max_opvoer_clc < 5.01) {
    document.getElementById('advies').innerHTML = pomp8;
}
else if (capaciteit_te < 20.01 && max_opvoer_clc < 6.01) {
    document.getElementById('advies').innerHTML = pomp12;
}
else {
    document.getElementById('advies').innerHTML = "Geen bijpassende pomp gevonden, meem contact met DAB op om te kijken welke pomp voor u geschikt is"
}
} else { document.getElementById('advies').innerHTML = "Reserve pomp nog niet geimplementeerd" }

答案 3 :(得分:1)

每个capaciteit_te值中max_opvoer_clcpomp的极值之和似乎是恒定的。您可以检查这2个变量的极限范围,并检查2个值的小于最大范围,如下所示。每个if()值只需要一个pomp条件块。

if (capaciteit_te < 4.01 &&
   max_opvoer_clc < 4.01 &&
   (capaciteit_te + max_opvoer_clc) < 5.02) 
{
   document.getElementById('advies').innerHTML = pomp1
} 
else if (capaciteit_te < 3.01 &&
   max_opvoer_clc < 6.01 &&
   (capaciteit_te + max_opvoer_clc) < 8.02) 
{
   document.getElementById('advies').innerHTML = pomp2
} 
else if (capaciteit_te < 11.01 &&
   max_opvoer_clc < 5.01 &&
   (capaciteit_te + max_opvoer_clc) < 13.02) 
{
   document.getElementById('advies').innerHTML = pomp3
}
//similar conditions for pomp4, pomp5 etc

答案 4 :(得分:1)

我会建议使用线性方法,方法是使用具有提前返回功能并首先检查capaciteit_temax_opvoer_clc的各种值。

调用函数后,用适当的文本替换undefined

这种方法的优点是易于维护。

function check() {
    if (capaciteit_te < 1.01) {
        if (max_opvoer_clc < 4.01) return pomp1;
        if (max_opvoer_clc < 6.01) return pomp2;
        return;
    }
    if (capaciteit_te < 2.01) {
        if (max_opvoer_clc < 3.01) return pomp1;
        if (max_opvoer_clc < 6.01) return pomp2;
        return;
    }
    if (capaciteit_te < 3.01) {
        if (max_opvoer_clc < 2.01) return pomp1;
        if (max_opvoer_clc < 5.01) return pomp2;
        if (max_opvoer_clc < 6.01) return pomp3;
        return;
    }
    if (capaciteit_te < 4.01) {
        if (max_opvoer_clc < 1.01) return pomp1;
        if (max_opvoer_clc < 4.01) return pomp2;
        return;
    }
    if (capaciteit_te < 5.01) {
        if (max_opvoer_clc < 3.01) return pomp2;
        if (max_opvoer_clc < 5.01) return pomp3;
        return;
    }
    if (capaciteit_te < 6.01) {
        if (max_opvoer_clc < 2.01) return pomp2;
        if (max_opvoer_clc < 5.01) return pomp3;
        if (max_opvoer_clc < 6.01) return pomp6;
        return;
    }
    if (capaciteit_te < 8.01) {
        if (max_opvoer_clc < 4.01) return pomp3;
        return;
    }
    if (capaciteit_te < 10.01) {
        if (max_opvoer_clc < 3.01) return pomp3;
        if (max_opvoer_clc < 4.01) return pomp5;
        return;
    }
    if (capaciteit_te < 11.01) {
        if (max_opvoer_clc < 2.01) return pomp3;
        if (max_opvoer_clc < 5.01) return pomp6;
        return;
    }
    if (capaciteit_te < 16.01) {
        if (max_opvoer_clc < 2.01) return pomp4;
        if (max_opvoer_clc < 3.01) return pomp5;
        if (max_opvoer_clc < 4.01) return pomp6;
        return;
    }
    if (capaciteit_te < 18.01) {
        if (max_opvoer_clc < 6.01) return pomp8;
        return;
    }
    if (capaciteit_te < 20.01) {
        if (max_opvoer_clc < 1.01) return pomp4;
        if (max_opvoer_clc < 2.01) return pomp5;
        if (max_opvoer_clc < 3.01) return pomp6;
        if (max_opvoer_clc < 5.01) return pomp8;
        if (max_opvoer_clc < 6.01) return pomp12;
        return;
    }
}

答案 5 :(得分:0)

我认为我找到了一个模式,或者说是两个模式。这应该提供与if-elses相同的输出:

const simpleSum = capaciteit_te + max_opvoer_clc;
const complicatedSum = capaciteit_te + 4 * max_opvoer_clc;
const advies = document.getElementById('advies');

if (simpleSum < 5.02) {
    advies.innerHTML = pomp1;
} else if (simpleSum < 8.02) {
    advies.innerHTML = pomp2;
} else if (simpleSum < 13.02) {
    advies.innerHTML = pomp2;
} else if (complicatedSum < 24.09) {
    advies.innerHTML = pomp4;
} else if (complicatedSum < 28.09) {
    advies.innerHTML = pomp5;
} else if (complicatedSum < 32.09) {
    advies.innerHTML = pomp6;
} else if (complicatedSum < 42.09) {
    advies.innerHTML = pomp8;
} else if (complicatedSum < 44.09) {
    advies.innerHTML = pomp8;
} else // the "not found" message

如果我没有在任何地方犯错(那么我很有可能会犯错)。

通常:将业务逻辑(我不得不进行逆向工程和猜测)放入代码中,生成if的一个或多个公式应该比原始的28个if更好。

答案 6 :(得分:0)

基于Tomer的建议

   const a = [
  [1.01, 4.01, pomp1],
  [2.01, 3.01, pomp1],
  [3.01, 2.01, pomp1],
  [4.01, 1.01, pomp1],
  [1.01, 6.01, pomp2],
  [2.01, 6.01, pomp2],
  [3.01, 5.01, pomp2],
  [4.01, 4.01, pomp2],
  [5.01, 3.01, pomp2],
  [6.01, 2.01, pomp2],
  [3.01, 6.01, pomp3],
  [6.01, 5.01, pomp3],
  [8.01, 4.01, pomp3],
  [10.01, 3.01, pomp3],
  [11.01, 2.01, pomp3],
  [16.01, 2.01, pomp4],
  [20.01, 1.01, pomp4],
  [10.01, 4.01, pomp5],
  [16.01, 3.01, pomp5],
  [20.01, 2.01, pomp5],
  [6.01, 6.01, pomp6],
  [11.01, 5.01, pomp6],
  [16.01, 4.01, pomp6],
  [20.01, 3.01, pomp6],
  [18.01, 6.01, pomp8],
  [20.01, 5.01, pomp8],
  [20.01, 6.01, pomp12],
];

const b = [
  [2.01, 6.01, pomp3],
  [3.01, 5.01, pomp3],
  [4.01, 4.01, pomp3],
  [5.01, 3.01, pomp3],
  [6.01, 2.01, pomp3],
  [9.01, 2.01, pomp4],
  [11.01, 1.01, pomp4],
  [5.01, 4.01, pomp5],
  [8.01, 3.01, pomp5],
  [10.01, 2.01, pomp5],
  [3.01, 6.01, pomp6],
  [6.01, 5.01, pomp6],
  [8.01, 4.01, pomp6],
  [10.01, 3.01, pomp6],
  [11.01, 2.01, pomp6],
  [9.01, 6.01, pomp8],
  [10.01, 5.01, pomp8],
  [11.01, 4.01, pomp8],
  [16.01, 2.01, pomp9],
  [20.01, 1.01, pomp9],
  [16.01, 3.01, pomp10],
  [12.01, 5.01, pomp11],
  [16.01, 4.01, pomp11],
  [20.01, 3.01, pomp11],
  [17.01, 6.01, pomp12],
  [20.01, 5.01, pomp12],
  [20.01, 6.01, pomp13],
];

let found = false;
if (document.getElementById('reserve').checked == false) {
  for (let i = 0; i < a.length; i++) {
    const c = a[i];
    if (capaciteit_te < c[0] && max_opvoer_clc < c[1]) {
      document.getElementById('advies').innerHTML = c[2];
      found = true;
      break;
    }
  }

} else {
  for (let i = 0; i < b.length; i++) {
    const c = b[i];
    if (capaciteit_te < c[0] && max_opvoer_clc < c[1]) {
      document.getElementById('advies').innerHTML = c[2];
      found = true;
      break;
    }
  }
}

if (!found) {
  document.getElementById('advies').innerHTML = "niets gevonden"
}

这很完美,因为如果需要添加额外的“ pompen”,它可以轻松进行修改。谢谢tomer