運賃計算のプログラムを作っています。
運賃検索のプログラムを作っています。例えば、中百舌鳥駅と深井駅を選択の順番を入れ替えても結果を同じにしたいです。
独自調査の結果、文字でやるより、数字でやったほうがsort関数が機能して、小さいもの順になって、挙動を同じにしやすいということが分かったので、文字→数字に変更しました。
そのsort関数を使った場合、
const vals = {
'sb01sb02':3.7,
'nakamozuizumigaoka':7.8,
'a0b0': 1.2,
'a0b1': 12,
'a0b2': 28.8,
},
len = [ 3, 6, 15, 30, 50],
prc = [140,160, 200, 250, 500],
f=(,l=Math.round())=>D.textContent=l?prc[len.findIndex(=>>l)]+'円':'';
A.addEventListener('change',_=>f(vals[B.value+C.value]));
この挙動が動くようにしていただきたいです。
要するに関数を使用した後に関数を使用することはできないかということです。
それって今のプログラミングではできないのでしょうか。お力添えをいただきたいです。
それが無理なら、
const vals = {
'sb01sb02':3.7,
'nakamozuizumigaoka':7.8,
'a0b0': 1.2,
'a0b1': 12,
'a0b2': 28.8,
},の'sb1sb2':3.7,の部分で、二度書きにならないようにする方法を試したいのです。
自分は、'sb01sb02'&'sb02sb01'や、&を二度書き連ねた方法、=をつなげた方法、二度書き連ねた方法などやってみましたが駄目でした。
も泣き寝入りです。
<!DOCTYPE html> <meta charset="utf-8"> <title></title> <style> </style> <body> <p id=A> <select id=B> <option value="">-- <option value="sb01">中百舌鳥 <option value="sb02">深井 <option value="sb03">泉ケ丘 <option value="sb04">栂・美木多 <option value="sb05">光明池 <option value="a0">a0 <option value="a1">a1 <option value="a2">a2 </select> <select id=C> <option value="">-- <option value="sb01">中百舌鳥 <option value="sb02">深井 <option value="sb03">泉ケ丘 <option value="sb04">栂・美木多 <option value="sb05">光明池 <option value="b0">b0 <option value="b1">b1 <option value="b2">b2 </select> </p> <p id=D></p> <script> const vals = { 'sb1sb2':3.7, 'nakamozuizumigaoka':7.8, 'a0b0': 1.2, 'a0b1': 12, 'a0b2': 28.8, }, len = [ 3, 6, 15, 30, 50], prc = [140,160, 200, 250, 500], f=(_,l=Math.round(_))=>D.textContent=l?prc[len.findIndex(_=>_>l)]+'円':''; A.addEventListener('change',_=>f(vals[B.value+C.value])); </script>
例えば起点駅を0として、ほかの駅に数字を張っておくとか、中百舌鳥~深井間をifで、最初に距離を与えておくとかいらないです。
お礼
皆様回答ありがとうございました。 色々な回答をしていただき、それぞれのマイナス面、プラス面を教えていただき、その上で考えたいと思っておりました。 主に、詳しく方法を回答いただきましたように、 関数を全て自分で作るのと、検索関数を使用して変換するのとがやはり あるのだと思いました。 今回は変換する文字列がないことも多くあるので、その文字列を検索する処理が 無駄になる事があるので、文章を一文字一文字おっていく関数を 自作する事にしました。 ありがとうございました。