我正在使用交互式java脚本表单,而输出则与switch case混淆。请帮助我:这是管道重量计算。
管道尺寸:100mm,150 mm,200 mm,250 mm至1000 mm 对于每个管道,压力等级变化:PN3,PN6和PN9 对于每个压力等级,刚度变化:SN124和SN256
对于给定的管道尺寸,压力等级和刚度等级 - 重量将不同。到达输出 - 我正在使用开关盒,这是非常漫长和耗时的。任何正文都可以帮助我解决java脚本,以便将其放入HTML文件中。
这是我的代码,但我认为必须有更好的方法来实现它。
什么是更好的方法?
<SCRIPT LANGUAGE="JavaScript">
function CalculateSum(Atext, Btext, Ctext,form)
{
var A = parseFloat(Atext);
var B = parseFloat(Btext);
var C = parseFloat(Ctext);
switch (true){
case (A == 100 && B == 3 && C == 124): K =21.4; L=102; M =55; break ;
case (A == 100 && B == 3 && C == 256): K =21.9; L=125; M=49; break ;
case (A == 100 && B == 3 && C == 512): K =22.2; L=133; M=45; break ;
case (A == 100 && B == 6 && C == 124): K =42.9; L=139; M=41; break ;
case (A == 100 && B == 6 && C == 256): K =42.78;L=141; M=39; break ;
case (A == 100 && B == 6 && C == 512): K =43.01;L=144; M=37; break ;
case (A == 100 && B == 9 && C == 124): K =54.84;L=148; M=34; break ;
case (A == 100 && B == 9 && C == 256): K =55.02;L=152; M=31; break ;
case (A == 100 && B == 9 && C == 512): K =56.90;L=157; M=29; break ;
case (A == 150 && B == 3 && C == 124): K =39.4; L=164; M=25; break ;
....
......
.......
break ;
}
form.Ans1.value = K + " Kg/Rmt";
form.Ans1.value = L + " Rmt";
form.Ans1.value = M + " Nos";
}
</SCRIPT>
答案 0 :(得分:2)
我认为您无法从K
,A
和B
计算C
,这当然是最好的。假设情况如此:
你的方式有效。这是使用switch
的一种不寻常的方式,但它在JavaScript中有效。 (不是大多数其他语言。)
另一种方法是将一个表作为一组嵌套的对象,然后在表中查看值:
var Values = {
// Values for A
100: {
// Values for B when A = 100
3: {
// Values for C when A == 100 and B == 3
124: 21.4,
256: 21.9,
512: 22.2
},
6: {
// Values for C when A == 100 and B == 6
124: 42.9,
256: 42.78,
512: 43.01
},
9: {
// Values for C when A == 100 and B == 9
124: 54.84,
256: 55.02,
512:39.4
}
},
150: {
// Values for B when A = 150
3: {
// Values for C when A == 150 and B == 3
124: 39.4
}
}
};
我不确定这会使数据更具可读性/可维护性,但使用起来非常快,而且可以更简洁地编写它(请参阅答案的结尾);我想包括上面的评论。
CalculateSum
最终看起来像这样:
function CalculateSum(Atext, Btext, Ctext,form)
{
var A = parseFloat(Atext);
var B = parseFloat(Btext);
var C = parseFloat(Ctext);
var entry;
// Get the top-level entry for A
entry = Values[A];
if (entry) {
// We have one, get its entry for this value of B
entry = entry[B];
if (entry) {
// We have one, get _its_ entry for C
entry = entry[C];
}
}
if (typeof entry === "number") {
form.Ans.value = entry + " Kg/Rmt";
}
else {
// Didn't find it
}
}
或者正如Deestan在评论中指出的那样,如果你没有在一个超紧密的循环中这样做,你可以缩短一点,你运行了数十万次(我猜你不是这样):
function CalculateSum(Atext, Btext, Ctext,form)
{
var A = parseFloat(Atext);
var B = parseFloat(Btext);
var C = parseFloat(Ctext);
var K;
// Get the entry from our tables
K = Values[A] && Values[A][B] && Values[A][B][C];
if (typeof K === "number") {
form.Ans.value = K + " Kg/Rmt";
}
else {
// Didn't find it
}
}
(我将entry
更改为K
,因为我们从不存储除最终值之外的任何内容。)
这里更简洁Values
:
var Values = {
100: {
3: { 124: 21.4, 256: 21.9, 512: 22.2 },
6: { 124: 42.9, 256: 42.78, 512: 43.01 },
9: { 124: 54.84, 256: 55.02, 512: 39.4 }
},
150: {
3: { 124: 39.4 }
}
};