実現したいこと
運賃検索プログラムを作っています。
対区間別運賃より、普通運賃、小児運賃等々を出したいと思っております。
ところで、従来のやり方だと、同じ路線の場合にはいいのですが、
違う路線を入れた場合に困るなぁと思い、switch文で路線分けをしましたが、問題が発生しております。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> </head> <body> <div> 出発駅: <select name="from" id="stations1"> <option value="姫路">姫路</option> <option value="京口">京口</option> <option value="野里">野里</option> <option value="A">A</option> <option value="B">B</option> <option value="C">C</option> <option value="D">D</option> </select> </div> <div> 到着駅: <select name="to" id="stations2"> <option value="姫路">姫路</option> <option value="京口">京口</option> <option value="野里">野里</option> <option value="A">A</option> <option value="B">B</option> <option value="C">C</option> <option value="D">D</option> </select> </div> 距離:<span name="distance"></span>km<br /> 区間:<span name="section"></span><br /> 普通運賃:<span name="adult"></span>円<br /> 小児運賃:<span name="child"></span>円<br /> </body> </html> 乗車区間: <span id="span1"></span> ~ <span id="span2"></span> 間 <script> document.getElementById("stations1").addEventListener("change", function() { // value値を取得 const str1 = this.value; document.getElementById("span1").textContent = str1; }); document.getElementById("stations2").addEventListener("change", function() { // value値を取得 const str1 = this.value; document.getElementById("span2").textContent = str1; }); function calc() { var f = document.querySelector('[name=from]').value; var t = document.querySelector('[name=to]').value; // 駅間に一致するものを探す var eki_info = null; for (var i = 0; i < list.length; i++) { var eki1 = list[i].name[0]; var eki2 = list[i].name[1]; if ((eki1 == f && eki2 == t) || (eki1 == t && eki2 == f)) { eki_info = list[i]; break; // 駅間が一致したらループを抜ける } } // 運賃情報を取得 var far_info = null; if (eki_info) { far_info = customCalc(eki_info.section); } // 情報を設定 if (eki_info && far_info) { document.querySelector('span[name=distance]').innerHTML = eki_info.distance; document.querySelector('span[name=section]').innerHTML = eki_info.section; document.querySelector('span[name=adult]').innerHTML = far_info.adult; document.querySelector('span[name=child]').innerHTML = far_info.child; } } document.addEventListener('DOMContentLoaded', function () { document.querySelector('select[name=from]').addEventListener('change', calc); document.querySelector('select[name=to]').addEventListener('change', calc); }); // 新しい要件に基づいて、sectionの内容を修正して運賃を返す関数 function customCalc(section) { var customFarInfo = null; // 新しい条件に基づいて運賃情報を探す switch (section) { case "bantan": section = "jr_west_traffic"; break; default: break; } // 該当する運賃情報を取得 for (var i = 0; i < fares.length; i++) { if (fares[i].section == section) { customFarInfo = fares[i]; break; } } // 運賃情報が見つかった場合、運賃を返す if (customFarInfo) { return customFarInfo; } else { return null; } } </script> <script> var fares = [ { section: "jr_west_traffic", adult: 0, child:0 }, { section: "orange" , adult: 190, child:200 } ]; var list = [ { name: ["姫路", "京口"], distance: 1.7, section: "bantan_2" }, { name: ["姫路", "野里"], distance: 4.3, section: "orange" }, ]; </script> </html>
発生している問題・分からないこと
switch文で完全一致するものしか拾ってくれません。部分一致するものを拾うにはどうなりますか。
エラーメッセージ
error
1何もでなくなります。 2どうすればいいのでしょうか。
該当のソースコード
```ここに言語を入力 // 新しい条件に基づいて運賃情報を探す switch (section) { case "bantan": section = "jr_west_traffic"; break; default: break; } // 該当する運賃情報を取得 for (var i = 0; i < fares.length; i++) { if (fares[i].section == section) { customFarInfo = fares[i]; break; } } // 運賃情報が見つかった場合、運賃を返す if (customFarInfo) { return customFarInfo; } else { return null; } }
の部分で、完全一致する情報は拾ってくれますが、部分一致のものは拾ってくれません。
### 試したこと・調べたこと - [x] teratailやGoogle等で検索した - [ ] ソースコードを自分なりに変更した - [ ] 知人に聞いた - [ ] その他 ##### 上記の詳細・結果 チャットgptで何度か質問しましたが、有益な情報は得られませんでした。 また、ワイルドカードも効かないです。 ### 補足 特になし
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/03/25 23:30
2024/03/25 23:36
2024/03/25 23:38
2024/03/25 23:43