我试图基于两个值生成结果,这两个值都是应用于多个输入字段的公式的结果。
我基本上已经成功创建了多个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"}
该功能有效,但我希望使用其他方法
答案 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_clc
和pomp
的极值之和似乎是恒定的。您可以检查这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_te
和max_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