-1

出力がスイッチケースと混同されているのに対し、インタラクティブなJavaスクリプトフォームを配置しています。親切に助けてください:パイプの重量計算です。

パイプのサイズ: 100mm、150 mm、200 mm、250mm から 1000 mm まで パイプごとに圧力クラスが異なります: PN3、PN6、および PN9 圧力クラスごとに剛性が異なります: SN124 および SN256

指定されたパイプ サイズ、圧力クラス、および剛性クラスでは、重量が異なります。出力に到達するには、スイッチケースを使用していますが、これには非常に時間と時間がかかります。HTMLファイルに同じものが配置されるように、どの体でもJavaスクリプトを解決するのに役立ちます。

これは私が持っているコードですが、もっと良い方法があるに違いないと思います。

より良い方法は何ですか?

<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

、、およびKから計算できないと思いますが、もちろんこれが最適です。それが事実であると仮定します:ABC

あなたのやり方がうまくいきます。珍しい使用方法switchですが、JavaScript では有効です。(他のほとんどの言語ではありません。)

それを行うもう 1 つの方法は、ネストされたオブジェクトの束としてテーブルを作成し、テーブルで値を検索することです。

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 に答える