-1

我正在放置一个交互式 java 脚本表单,而输出与 switch case 混淆了。请帮助我:这是管道重量计算。

管道尺寸:100 毫米、150 毫米、200 毫米、250 毫米到 1000 毫米 对于每个管道,压力等级各不相同: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>
4

1 回答 1

2

我假设您无法KAB和计算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 }
    }
};
于 2012-07-06T09:28:01.020 回答