プロが教えるわが家の防犯対策術!

出発駅A、到着駅Bを選択すると、2.3㎞と170円と返るようにしたいです。
具体的には{ name:["A", "B"], distance: 1.5,between:1}に対して、{ between:1,fare:170 }と返るようにしたいです。
実装方法がわからないです。
また、これらをifで分岐させたいです。どうしたらいいのでしょうか。
<head>
<meta charset="UTF-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4 …
<script>
/**
* distance : 区間距離(km)
* name : 区間名
* price : 区間における乗車運賃
*/
const price_table = [
{ distance: 0, name: '見送り', price: { normal: 120, child: 60 } },
{ distance: 3, name: '1区間', price: { normal: 150, child: 80 } }, ];

/**
* name: '駅名'
* distance: 次の駅までの距離
*/
const stations = [
{ name: 'A', distance: 1.5 },
{ name: 'B', distance: 1.5 },
];
</script>
<script>
$(function () {
$(document).on('change', function () {
var f = $('[name=from]').val();
var t = $('[name=to]').val();

// 何番目の駅かを探す
let from_idx = stations.findIndex(station => station.name == f);
let to_idx = stations.findIndex(station => station.name == t);

// from, to が昇順になるようにする。
let from_to = [from_idx, to_idx].sort();

// どちらかが未入力の場合、もしくは駅名が見つからない場合は処理を受け付けないようにする。
if (from_to[0] < 0) {
return;
}

// 駅間の距離を加算する。
let d = 0;
for (let i = from_to[0]; i < from_to[1]; i++) {
d += stations[i].distance;
}

// 距離の合計値による料金テーブルを探す
const period = price_table.find(price => d <= price.distance);

$('span[name=distance]').html(d);
$('span[name=kukan]').html(period.name);
$('span[name=price]').html(period.price.normal);
});
});
</script>

</head>

<body>
<div>
出発駅:
<select name="from">
<option value="">--</option>
<option value="A">A</option>
<option value="B">B</option>
</select>
</div>
<div>
到着駅略
</div>
距離:<span name="distance"></span>km<br />
区間:<span name="kukan"></span><br />
料金:<span name="price"></span>円
</body>

</html>
jsのプログラムサイトをいろいろ調べてみましたが、グッとくるものはなかったです。

A 回答 (1件)

> 出発駅A、到着駅Bを選択すると、2.3㎞と170円と返る



駅情報や料金表を訂正しましょう
例) AB 間を 1.5km から 2.3km に変更
例) 3km 以下の料金を 150 円から 170 円に変更

> { name:["A", "B"], ... }に対して、{ between:1,fare:170 }と返る

処理の入出力を HTML 読み書きではなく JSON にしましょう
例)
function 処理(param) {
_ var f = param.name[0], t = param.name[1]; // $.val() を使わない
_ ...
_ return { // $.html() を使わない
_ _ beetween:Math.abs(from_idx-to_idx),
_ _ fare:period.price.normal,
_ };
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A