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

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

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

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

Q&A

解決済

4回答

1093閲覧

Javascriptにおけるループについて。

Shinog

総合スコア99

JavaScript

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

0グッド

1クリップ

投稿2015/10/06 07:30

はじめまして。

ある配列をループして、ある条件式に等しい場合、'Right!'と表示され、全ての配列が条件式に合わなかった場合、一回のみ'False!'と表示されるようなコードを実装したいのですが、
配列のループ分'False!'と表示されてしまいます。

javascript

1for(var k in array){ 2 3 if(条件式){ 4 document.write('Right!'); 5 }else{ //elseがfor内に入ってしまっているので、配列の数だけ'False!'と表示されてしまう。 6 document.write('False!'); 7 } 8 9}

このような場合、上記のコードをどのように書き換えれば良いでしょうか?
何かお分かりの方は、是非ともご教授の程よろしくお願いします。

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

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

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

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

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

guest

回答4

0

flag を使用する方法もありますが、document.write を何度も呼び出すとリフロー回数が増えてパフォーマンス的によろしくない為、配列にキャッシュして一度に document.write する方法をお勧めします。
**for-inindex の列挙順を保証しない(ランダム)**なので for 文を使用しました(今回の例では支障は生じませんが、基本的に配列に使うべきではないと思います)。

JavaScript

1var array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 2 results = []; 3 4for (var i = 0, l = array.length, value; i < l; ++i) { 5 value = array[i]; 6 7 if (value % 2 === 0) { 8 results.push('Right!'); 9 } 10} 11 12document.write(results.length > 0 ? results.join('\r\n') : 'False!'); 13console.log(results); // [0, 2, 4, 6, 8]

投稿2015/10/06 08:03

think49

総合スコア18162

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

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

0

ベストアンサー

外側に、「一度でも条件をクリアしたか」を記録するフラグを入れましょう。

javascript

1var cleared = false; 2 3for(var k in array){ 4 5 if(条件式){ 6 document.write('Right!'); 7 cleared = true; 8 } 9} 10 11if (!cleared) { 12 document.write('False!'); 13}

なお、2点ほどアドバイスがあります。

  • document.writeを使うと、ブラウザの動作が一時中断したり、ロード後に実行するとブラウザの中身が全クリアされたりするなど、現代では使いにくいものとなっています。DOMで出力しましょう。
  • 配列をfor-inで回すと、余計なものが引っかかったり遅かったりで綺麗に動作しません。普通のforループでインデックスを操作しましょう。

投稿2015/10/06 07:38

maisumakun

総合スコア145183

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

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

Shinog

2015/10/06 08:05

親切かつ丁寧なご回答ありがとうございます!! clearedのフラグを立てることで、無事解決出来ました。 2つのアドバイスもこれから参考にさせて頂きます。
guest

0

一例です

javascript

1 2var f = 0; 3 4for(var k in array){ 5 6 if(条件式){ 7 document.write('Right!'); 8 f = 1; 9 break; 10 } 11} 12 13if( f==0 ){ 14 document.write('False!'); 15}

投稿2015/10/06 07:36

takito

総合スコア3111

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

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

0

break;を利用すればいいのではないでしょうか?

投稿2015/10/06 07:33

orange0190

総合スコア1698

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問