<script> function fnckeisan() { // 入力された数値(sss) var sss = (document.querySelector('#sss').value); // 1番または2番の選択 var asall={"a1":1,"a2":2}; var selecas= asall[document.querySelector('#as').value]; // カンマの定義 var conma = new Intl.NumberFormat(); // 各種 関数の定義 var x1; var x2; var x3; var x4; var x5; var word ='数値の小さな順に並べ替え'; var wordx1 =`<a href="#">回答(1)</a>`; var wordx2 =`<a href="#">回答(2)</a>`; var wordx3 =`<a href="#">回答(3)</a>`; var wordx4 =`<a href="#">回答(4)</a>`; var wordx5 =`<a href="#">回答(5)</a>`; var wordx6 =`<a href="#">回答(6)</a>`; var wordx7 =`<a href="#">回答(7)</a>`; var wordx8 =`<a href="#">回答(8)</a>`; var wordx9 =`<a href="#">回答(9)</a>`; var wordx10 =`<a href="#">回答(10)</a>`; var wordx11 =`<a href="#">回答(11)</a>`; var wordx12 =`<a href="#">回答(12)</a>`; var wordx13 =`<a href="#">回答(13)</a>`; var wordx14 =`<a href="#">回答(14)</a>`; var wordx15 =`<a href="#">回答(15)</a>`; var table1 =`<table><td>`; var table2 =`</td></table>`; // 選択(1番または2番)によってx1~x5の数値が変わる switch (selecas) { case 1: x1 = 10.5 , x2 = 20.6 , x3 = 30.9 , x4 = 40.8 , x5 = 50.7; break; case 2: x1 = 150.8 , x2 = 250.7 , x3 = 350.3 , x4 = 450.6 , x5 = 550.8; break; } // 入力されたsssの値(100未満または100以上)によってans1~ans15の計算式および結果が変わる if (sss >= 100){ ans1 = (sss - 300) * x1; ans2 = (sss - x2); ans3 = (sss - x3) * x3; ans4 = (sss - x4) * x4; ans5 = (sss - 300) * x5; ans6 = (sss - 20) * x1; ans7 = (sss - x2 - 30); ans8 = (sss - x3) * x1 + 400; ans9 = (sss - x4) * x2 * x2; ans10 = (sss - 300) * x5 * x1; ans11 = (sss - 100) * x1 + 400; ans12 = (sss - x2 + x5); ans13 = (sss - x3) * x3; ans14 = (sss - x2) * x4 + 1000; ans15 = (sss - 300) * x3 * x3; }else if (sss < 100){ ans1 = (sss - 100) * x5; ans2 = (sss - x4) * x4; ans3 = (sss - x3) * x3; ans4 = (sss - x2); ans5 = (sss - 100) * x1; ans6 = (sss - 300) * x1 * x1; ans7 = (sss - x2) * x2; ans8 = (sss - x3) * x3 + 2100; ans9 = (sss - x4) * x4 + 6000; ans10 = (sss - 300) * x5 + 100; ans11 = (sss - 300) * x1 - 300; ans12 = (sss - x2) + 4000; ans13 = (sss - x3) * x3 * x4; ans14 = (sss - x4) * x4 * x5 + 100; ans15 = (sss - 300) * x5 - 30; } // 計算結果の表示(2番を選んだ場合は、こちらで指定した結果については表示されない) document.querySelector('#ansall').innerHTML = word +("\n")+ [ wordx1+conma.format(ans1), selecas==2?'':(wordx2+conma.format(ans2)), wordx3+conma.format(ans3), selecas==2?'':(wordx4+conma.format(ans4)), wordx5+conma.format(ans5), selecas==2?'':(wordx6+conma.format(ans6)), wordx7+conma.format(ans7), selecas==2?'':(wordx8+conma.format(ans8)), wordx9+conma.format(ans9), selecas==2?'':(wordx10+conma.format(ans10)), wordx11+conma.format(ans11), selecas==2?'':(wordx12+conma.format(ans12)), wordx13+conma.format(ans13), selecas==2?'':(wordx14+conma.format(ans14)), wordx15+conma.format(ans15), ].filter(function(x){ return x.match(/\d/); }).sort(function(x,y){ return (x.match(/(\d+)/)[1])>(y.match(/(\d+)/)[1]); }).join("\n"); } </script> <form> <td>数値を入力してください(1~300)</td> <input type="text" id="sss" type="number" min="0" max="300" value="0"> <td>1番~5番の計算式を選んでください</td> <select id="as"> <option value="a1">1番</option> <option value="a2">2番</option> </select> <br> <input type="button" value="計算" onclick="fnckeisan();"> <br> <input type="reset" value="リセット"> <div id="ansall" style="white-space:pre;"></div> </form>
上記のプログラムにおいて、計算されたans1~ans15の結果に応じて、それぞれを数値の小さな順に並び替えた上で、任意の結果だけを表示できるようにしたいと考えています。
(具体的には、ans1~ans15の計算結果の最小値から順に、5個だけ表示できるようにしたり、9個表示できるようにしたり、または全部を表示できるようにしたい)
しかし、現行のプログラムでは15個の結果すべてを表示することしかできず、さらに3つの問題点があり、どう改善すれば良いか分かりません。
① 出力されるans1~ans15の数値はカンマ付きで表示をしたいが、カンマ付きにすると並び替えがうまく機能しない。どうすると良いか?
② 出力するansの数が10個以内であれば、とりあえず並び替えは機能するが、10個を超えると機能しない。(\n)の扱いをどうすると良いか?
③ 並び替えの際に、負の整数のマイナスを無視して並び替えてしまう。どうすると良いか?
丸投げのように思われるかもしれませんが、改善の仕方をご教授いただけると大変ありがたく思います。
決して丸投げにはしていませんが、サンプルないし改善プログラムを提供いただけましたら、こちらで頑張って解読しながら学ばせていただきますので、どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/21 02:01
2018/09/21 05:20
2018/09/21 05:38
2018/09/21 05:39
2018/09/21 05:40
2018/09/21 06:33
2018/09/21 06:40
2018/09/21 06:47
2018/09/21 09:29