作りたいもの
シンプルな翻訳フォームのようなものを作っています。
日本語を入力→それに対応した英語が出力される。
return文を今回for文の外に記載すると予期した結果が出力されますが、
return文をelse文の中に記載すると予期しない結果になってしまう。
理解できずになんとなく完成してしまっているのでその理由を知りたい。
html
html
1 <form action="" id="form" name="formName"> 2 <label for="lang">日本語:<input type="text" id="lang" value="" name="lang"></label> 3 <button id="btn" type="submit">検索</button> 4 <div>英訳<div id="outputArea"></div></div> 5 </form>
javascript
javascript
1const outputArea = document.getElementById('outputArea'); 2const btn = document.getElementById('btn'); 3const form = document.getElementById('form'); 4const lang = document.getElementById('lang'); 5const list = { 6 apple: 'りんご', 7 banana:'バナナ', 8 park:'公園', 9 sweet:'甘い' 10} 11 12const arr = Object.keys(list);//key取得 13 14const search = (inputValue) => { 15 for(let i = 0;i < arr.length; i++) { 16 if(list[arr[i]] === inputValue) { 17 return arr[i]; 18 } //ここにelse文で「return 'わかりません';」を書くと全ての結果が「わかりません」になる 19 } 20 return 'わかりません';//ここにreturn文を書くときちんと動く 21} 22 23const output = () => { 24 const inputValue = lang.value; 25 const result = search(inputValue); 26 outputArea.innerHTML = result; 27 return false; 28} 29 30form.onsubmit = output;
何がわからないのか
javascript文をご覧ください。
return文をなぜfor文の外に記載しないときちんと動かない(※1)のかの理由が知りたい。
私の考えとしては:
例:inputValueが「公園」だった場合
①if(list[arr[i]] === inputValue) {
→list[arr[i]]でvalueが取得できる。だから[i]番目のvalueが「公園」だった場合、
②return arr[i];
→その[i]番目のkeyを返す
③else
→「公園」というvalueが存在しない場合
④return 'わからない';
→わからないという結果を返す
なのでこちらで動くと思っていました。
return文云々の前に、そもそもこの考え方が間違っているのでしょうか?
※1きちんと動かないとは?
→return文をelse以下に記載すると、合致するkeyがあったとしても
全て「わからない」という結果が返って来てしまう。
念の為動かない例を下記のリンク先にて紹介します↓
https://jsfiddle.net/0njshfpo/3/
ご回答いただけたら嬉しいです。
お手数ですがよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/09 09:52