JavaScript程序

时间:2012-07-05 15:53:07

标签: javascript

我正在使用交互式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>

1 个答案:

答案 0 :(得分: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 }
    }
};