sembokulove
@sembokulove (Missing place)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

次のconst valsからvals[__ + _]));までの挙動をif文を使って 分岐させる際に、どのような関数を用いますか。

次のconst valsからvals[__ + _]));までの挙動をif文を使って
分岐させる際に、どのような関数を用いますか。
それに加え、配列内での開業もできたらと思います。
自分は、const valsの配列の中において、
a0b0だったら、1.2、a0b1だったら、2.5の値をつけ、
さらに、lenの配列で、2以下の数値のものには170(90)…以下略という数値をイベントを使って与えることに成功しました。
ただ、難点なのは、if分岐ができないことと、配列内における改行ができないことです。
どうやったらできるのでしょうか。
当方初歩のjsの知識しか持ち合わせておりませんので、
script文を省略せずにお願い申し上げます。

<!DOCTYPE html>
<meta charset="utf-8">
<title></title>
<style>
</style>

<body>
<p id=A>
<select id=B>
	<option value="">--
    <option value="nakamozu">中百舌鳥
	<option value="fukai">深井
	<option value="izumigaoka">泉ケ丘
    <option value="togamikita">栂・美木多
	<option value="komyoike">光明池
	<option value="a0">a0
	<option value="a1">a1
	<option value="a2">a2
</select>

<select id=C>
	<option value="">--
    <option value="nakamozu">中百舌鳥
	<option value="fukai">深井
	<option value="izumigaoka">泉ケ丘
    <option value="togamikita">栂・美木多
	<option value="komyoike">光明池
	<option value="b0">b0
	<option value="b1">b1
	<option value="b2">b2
</select>
</p>
<p id=D></p>

<script>
if((B.value == "nakamozu"&&C.value=="fukai")){
const vals = {
    'nakamozufukai':3.7,
  },
  len = [1, 2, 4, 6, 8, 10, 12, 14, 16], 
  prc = ['運賃170(90),<br>回数券1,700(900),<br>通勤_1か月6,540(3,270)_3か月18,640(9,320)_6か月35,320(17,660),通学_1か月3,030(1,520)_3か月8,640(4,320)_6か月_16,370(8,190)', 
  '運賃170(90),回数券1,700(900),<br>通勤_1か月6,540(3,270)_3か月18,640(9,320)_6か月35,320(17,660),通学_1か月3,030(1,520)_3か月8,640(4,320)_6か月_16,370(8,190)', 
  '運賃190(100),回数券1,900(1,000),<br>通勤_1か月7,360(3,680)_3か月20,980(10,490)_6か月39,750(19,880),通学_1か月3,470(1,700)_3か月9,690(4,850)_6か月_18,360(9,180)',
  '運賃210(110),回数券2,100(1,100),<br>通勤_1か月8,180(4,090)_3か月23,320(11,680)_6か月44,180(22,090),通学_1か月3,780(1,890)_3か月10,780(5,390)_6か月_20,420(10,210)',
  '運賃230(120),回数券2,300(1,200),<br>通勤_1か月8,990(4,500)_3か月25,630(12,820)_6か月48,550(24,280),通学_1か月4,160(2,080)_3か月11,860(5,930)_6か月_22,470(11,240)',
  '運賃250(130),回数券2,500(1,300),<br>通勤_1か月9,810(4,910)_3か月27,960(13,980)_6か月52,980(26,490),通学_1か月4,530(2,270)_3か月12,920(6,460)_6か月_24,470(12,240)',
  '運賃270(140),回数券2,700(1,400),<br>通勤_1か月10,620(5,310)_3か月30,270(15,140)_6か月57,350(28,680),通学_1か月4,910(2,460)_3か月14,000(7,000)_6か月_26,520(13,260)',
  '運賃290(150),回数券2,900(1,500),<br>通勤_1か月11,450(5,730)_3か月32,840(16,320)_6か月52,980(30,920),通学_1か月5,290(2,650)_3か月15,080(7,540)_6か月_28,570(14,290)'], 
  f = (_, l = Math.floor(_)) => D.innerHTML = l ? prc[len.findIndex(_ => _ > l)] + '円' : ''; 
  A.addEventListener('change', _ => f(vals[(_ = B.value) + (__ = C.value)] || vals[__ + _]));}
  else if{const vals = {
    'nakamozuizumigaoka':7.8,
    'a0b0': 1.2,
    'a0b1': 12,
    'a0b2': 28.8,
  },
  len = [1, 2, 4, 6, 8, 10, 12, 14, 16], 
  prc = ['運賃170(90),<br>回数券1,700(900),<br>通勤_1か月6,540(3,270)_3か月18,640(9,320)_6か月35,320(17,660),通学_1か月3,030(1,520)_3か月8,640(4,320)_6か月_16,370(8,190)', 
  '運賃170(90),回数券1,700(900),<br>通勤_1か月6,540(3,270)_3か月18,640(9,320)_6か月35,320(17,660),通学_1か月3,030(1,520)_3か月8,640(4,320)_6か月_16,370(8,190)', 
  '運賃190(100),回数券1,900(1,000),<br>通勤_1か月7,360(3,680)_3か月20,980(10,490)_6か月39,750(19,880),通学_1か月3,470(1,700)_3か月9,690(4,850)_6か月_18,360(9,180)',
  '運賃210(110),回数券2,100(1,100),<br>通勤_1か月8,180(4,090)_3か月23,320(11,680)_6か月44,180(22,090),通学_1か月3,780(1,890)_3か月10,780(5,390)_6か月_20,420(10,210)',
  '運賃230(120),回数券2,300(1,200),<br>通勤_1か月8,990(4,500)_3か月25,630(12,820)_6か月48,550(24,280),通学_1か月4,160(2,080)_3か月11,860(5,930)_6か月_22,470(11,240)',
  '運賃250(130),回数券2,500(1,300),<br>通勤_1か月9,810(4,910)_3か月27,960(13,980)_6か月52,980(26,490),通学_1か月4,530(2,270)_3か月12,920(6,460)_6か月_24,470(12,240)',
  '運賃270(140),回数券2,700(1,400),<br>通勤_1か月10,620(5,310)_3か月30,270(15,140)_6か月57,350(28,680),通学_1か月4,910(2,460)_3か月14,000(7,000)_6か月_26,520(13,260)',
  '運賃290(150),回数券2,900(1,500),<br>通勤_1か月11,450(5,730)_3か月32,840(16,320)_6か月52,980(30,920),通学_1か月5,290(2,650)_3か月15,080(7,540)_6か月_28,570(14,290)'], 
  f = (_, l = Math.floor(_)) => D.innerHTML = l ? prc[len.findIndex(_ => _ > l)] + '円' : ''; 
  A.addEventListener('change', _ => f(vals[(_ = B.value) + (__ = C.value)] || vals[__ + _]));
}}
</script>

追記、以下のjavascript文どこが間違っていますか。if分岐させてみました。

<script>
if((B.value == "nakamozu"&&C.value=="fukai")){
const vals = {
    'nakamozufukai':3.7,
  },
  len = [1, 2, 4, 6, 8, 10, 12, 14, 16], 
  prc = ['運賃170(90),<br>回数券1,700(900),<br>通勤_1か月6,540(3,270)_3か月18,640(9,320)_6か月35,320(17,660),通学_1か月3,030(1,520)_3か月8,640(4,320)_6か月_16,370(8,190)', 
  '運賃170(90),回数券1,700(900),<br>通勤_1か月6,540(3,270)_3か月18,640(9,320)_6か月35,320(17,660),通学_1か月3,030(1,520)_3か月8,640(4,320)_6か月_16,370(8,190)', 
  '運賃190(100),回数券1,900(1,000),<br>通勤_1か月7,360(3,680)_3か月20,980(10,490)_6か月39,750(19,880),通学_1か月3,470(1,700)_3か月9,690(4,850)_6か月_18,360(9,180)',
  '運賃210(110),回数券2,100(1,100),<br>通勤_1か月8,180(4,090)_3か月23,320(11,680)_6か月44,180(22,090),通学_1か月3,780(1,890)_3か月10,780(5,390)_6か月_20,420(10,210)',
  '運賃230(120),回数券2,300(1,200),<br>通勤_1か月8,990(4,500)_3か月25,630(12,820)_6か月48,550(24,280),通学_1か月4,160(2,080)_3か月11,860(5,930)_6か月_22,470(11,240)',
  '運賃250(130),回数券2,500(1,300),<br>通勤_1か月9,810(4,910)_3か月27,960(13,980)_6か月52,980(26,490),通学_1か月4,530(2,270)_3か月12,920(6,460)_6か月_24,470(12,240)',
  '運賃270(140),回数券2,700(1,400),<br>通勤_1か月10,620(5,310)_3か月30,270(15,140)_6か月57,350(28,680),通学_1か月4,910(2,460)_3か月14,000(7,000)_6か月_26,520(13,260)',
  '運賃290(150),回数券2,900(1,500),<br>通勤_1か月11,450(5,730)_3か月32,840(16,320)_6か月52,980(30,920),通学_1か月5,290(2,650)_3か月15,080(7,540)_6か月_28,570(14,290)'], 
  f = (_, l = Math.floor(_)) => D.innerHTML = l ? prc[len.findIndex(_ => _ > l)] + '円' : ''; 
  A.addEventListener('change', _ => f(vals[(_ = B.value) + (__ = C.value)] || vals[__ + _]));}
  else if{const vals = {
    'nakamozuizumigaoka':7.8,
    'a0b0': 1.2,
    'a0b1': 12,
    'a0b2': 28.8,
  },
  len = [1, 2, 4, 6, 8, 10, 12, 14, 16], 
  prc = ['運賃170(90),<br>回数券1,700(900),<br>通勤_1か月6,540(3,270)_3か月18,640(9,320)_6か月35,320(17,660),通学_1か月3,030(1,520)_3か月8,640(4,320)_6か月_16,370(8,190)', 
  '運賃170(90),回数券1,700(900),<br>通勤_1か月6,540(3,270)_3か月18,640(9,320)_6か月35,320(17,660),通学_1か月3,030(1,520)_3か月8,640(4,320)_6か月_16,370(8,190)', 
  '運賃190(100),回数券1,900(1,000),<br>通勤_1か月7,360(3,680)_3か月20,980(10,490)_6か月39,750(19,880),通学_1か月3,470(1,700)_3か月9,690(4,850)_6か月_18,360(9,180)',
  '運賃210(110),回数券2,100(1,100),<br>通勤_1か月8,180(4,090)_3か月23,320(11,680)_6か月44,180(22,090),通学_1か月3,780(1,890)_3か月10,780(5,390)_6か月_20,420(10,210)',
  '運賃230(120),回数券2,300(1,200),<br>通勤_1か月8,990(4,500)_3か月25,630(12,820)_6か月48,550(24,280),通学_1か月4,160(2,080)_3か月11,860(5,930)_6か月_22,470(11,240)',
  '運賃250(130),回数券2,500(1,300),<br>通勤_1か月9,810(4,910)_3か月27,960(13,980)_6か月52,980(26,490),通学_1か月4,530(2,270)_3か月12,920(6,460)_6か月_24,470(12,240)',
  '運賃270(140),回数券2,700(1,400),<br>通勤_1か月10,620(5,310)_3か月30,270(15,140)_6か月57,350(28,680),通学_1か月4,910(2,460)_3か月14,000(7,000)_6か月_26,520(13,260)',
  '運賃290(150),回数券2,900(1,500),<br>通勤_1か月11,450(5,730)_3か月32,840(16,320)_6か月52,980(30,920),通学_1か月5,290(2,650)_3か月15,080(7,540)_6か月_28,570(14,290)'], 
  f = (_, l = Math.floor(_)) => D.innerHTML = l ? prc[len.findIndex(_ => _ > l)] + '円' : ''; 
  A.addEventListener('change', _ => f(vals[(_ = B.value) + (__ = C.value)] || vals[__ + _]));
}}
</script>
0

2Answer

script文を省略せずにお願い申し上げます。

毎回のように書いておられますが,方法論を質問しているのにまるごとソースを貼ってくれというのは自分は 提供されたソースを正しく解釈して応用する気がない(=丸コピして使わせてもらう) と言っているのと同義なので,御世辞にも良い態度とは言えないです.
自信がないのであればもうちょっと勉強してきてください.

さて,本題についてですがそもそも「if分岐」によって何を実現したいのか今一つ不明です.
現状の形の悪さはともかくとして営業キロと運賃を連動させるための配列管理である(=要するに if文で対応しなければならないようなイレギュラーケースを極力少なくしたい )設計であるにもかかわらず,if文で何を対応しなければならないのかが書かれていません.
制御構文というのは目的があって書くものですので,何をif文で実現したいかが明確でなければそもそもお答えできません.

単に乗降車駅の組み合わせを増やしたいだけなら,適当な配列要素を追加するだけです.

配列内の改行というのはおそらくリテラルが長すぎるという意味だと解釈しますが普通に+で分割すればいいだけです.

  prc = [
  '運賃170(90),<br>回数券1,700(900),<br>'+
    '通勤_1か月6,540(3,270)_3か月18,640(9,320)_6か月35,320(17,660),'+
    '通学_1か月3,030(1,520)_3か月8,640(4,320)_6か月_16,370(8,190)', 
  '運賃170(90),回数券1,700(900),<br>'+
    '通勤_1か月6,540(3,270)_3か月18,640(9,320)_6か月35,320(17,660),'+
    '通学_1か月3,030(1,520)_3か月8,640(4,320)_6か月_16,370(8,190)', /*...*/]
0Like

Comments

  1. だいいちこのソースもminifyされたようなコードであるあたりどっかから引っ張ってきたものと推察します.
    要するにどこかのプロダクトを都合よく改変して貼ってくれと言っているようなもので,ライセンス上の懸念があることにも留意してください.

  2. @sembokulove

    Questioner

    これは、泉北高速鉄道の運賃の計算を行っております。
    但し、和泉中央と他駅との間の運賃は20円の追加料金が発生するために、
    例外処理を行わなくてはなりません。
    現状の状態だと、例えば、中百舌鳥~和泉中央間だと、距離相応の値が出てしまうのです。
    それを防ぐために例外処理が必要となってくるわけです。
    僕がやりたいのはprc内の配列の例外処理です。
    prc内の例外処理はif((val="nakamozu")||(val"izumichuo"))とかにはならないでしょうか。
    後希望することといたしましては、
    そもそもですが、constを2つつけて、配列の中身を合算するやり方です。

      '運賃170(90),<br>回数券1,700(900),<br>'+
        '通勤_1か月6,540(3,270)_3か月18,640(9,320)_6か月35,320(17,660),'+
        '通学_1か月3,030(1,520)_3か月8,640(4,320)_6か月_16,370(8,190)', 
      '運賃170(90),回数券1,700(900),<br>'+
        '通勤_1か月6,540(3,270)_3か月18,640(9,320)_6か月35,320(17,660),'+
        '通学_1か月3,030(1,520)_3か月8,640(4,320)_6か月_16,370(8,190)', /*...*/]```
    だと、配列が文字として認識されてしまいますので、これを、
    ```prc[170+,90+,1,700+,900+,6,540+,3,270+,18,640+,9,320+,35,320+,17,660+,3,030+,1,520+,8,640(4,320+,16,370+,8,190, /*...*/]```
    に改める必要がありますが。 
    

This answer has been deleted for violation of our Terms of Service.

Your answer might help someone💌