質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

806閲覧

value値から合致するkeyを取得する際のreturnの使い方について

kitty

総合スコア15

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/06/09 09:35

作りたいもの

シンプルな翻訳フォームのようなものを作っています。
日本語を入力→それに対応した英語が出力される。
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/

ご回答いただけたら嬉しいです。
お手数ですがよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

i0のときを想定してみてください。return された時点で関数は終了します。

js

1 if(list[arr[0]] === '公園') { // list[arr[0]] は list['apple'] で 'りんご'。 2 return arr[0]; 3 } else { //'りんご' === '公園'ではないから'わかりません'が返り、関数が終了する。 4 return 'わかりません'; 5 }

投稿2019/06/09 09:50

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kitty

2019/06/09 09:52

ご回答ありがとうございます。即理解できました。また機会がありましたらよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問