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

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

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

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

0回答

857閲覧

if文の条件分岐:正しく判断されていない

xxx0_0xxx

総合スコア9

JavaScript

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2021/10/27 08:47

編集2021/10/28 00:48

if文条件分岐についてです。
どうも条件が正しく入らず、else if に入ってしまいます。

rangeで数値を24まで回しています。

Typescript

1_.range(24).forEach((h) => { 2 _.range(60).forEach((m) => { 3 let index: number = h * 60 + m; 4 let realHour: number = (h + 4) % 24; 5 // 5分刻みで残すデータ 6 if (index % 5 === 0) { 7 // 不足データ新規作成。 8 if (!returnMinuteList[index]) { 9 returnMinuteList[index] = { 10 timeClassName: "", 11 isZeroMinute: false, 12 hourString: "", 13 channelProgramList: [] 14 }; 15 } 16 17 // プロパティの初期化。 18 returnMinuteList[index].timeClassName = (String("00" + realHour).slice(-2) + String("00" + m).slice(-2)); 19 returnMinuteList[index].isZeroMinute = (m === 0); 20 returnMinuteList[index].hourString = String(realHour); 21 returnMinuteList[index].channelProgramList = []; 22 // 不要データはundefined 23 } else { 24 returnMinuteList[index] = undefined; 25 } 26 }); 27 if (0 <= h && h < 12) { 28 this.ampm = "午前"; 29 } else if (12 <= h && h < 24) { 30 this.ampm = "午後"; 31 }; 32 return this.ampm; 33 });

下記が該当のソースコードです。
011までは午前という表示
12
23までは午後という表記にしたいと考えています。
条件として足らないのでしょうか?
※①〜④はコンソールに出力した結果です。

TypeScript

1console.log(h); // ① 0,1,2,3,4,5,6,7,8,9,10,11...23 2if (0 <= h && h < 12) { 3 console.log(h); // ② 0,1,2,3,4,5,6,7,8,9,10,11 4    this.ampm = "午前"; 5} else if (12 <= h && h < 24) { 6    console.log(h); // ③ 12,13,14,15,16...23 7    this.ampm = "午後"; 8}; 9console.log(h); // ④ 0,1,2,3,4,5,6,7,8,9,10,11...23 10return this.ampm;

↓コメントを受けて追加しました。

試したこと

HTML側では *ngIf を利用して表示させています。
これだと午前午後の表記になってしまいます。
これではngifの条件分岐がなされていないのでしょうか?

Angular

1<th *ngIf="minute.isZeroMinute" rowspan="12"><ng-container *ngIf="am">{{am}}</ng-container><ng-container *ngIf="pm">{{pm}}</ng-container>{{minute.hourString}}<br>時</th> 2

TypeScript

1 2export class Component { 3 4am: string = ""; 5pm: string = ""; 6 7 8if (0 <= h && h < 12) { 9 return this.am = "午前"; 10} else if (12 <= h && h < 24) { 11 return this.pm = "午後"; 12}; 13 14}

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

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

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

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

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

itagagaki

2021/10/27 08:52

> 0~11までは午前という表示 > 12~23までは午後という表記にしたいと考えています。 > 条件として足らないのでしょうか? > ※①〜④はコンソールに出力した結果です。 コンソール出力結果を見ると正しく分岐しているように見えるのですが?
xxx0_0xxx

2021/10/27 09:21

回答ありがとうございます。 画面上はなぜか「午後」表記しかされないのです。
退会済みユーザー

退会済みユーザー

2021/10/27 09:27

this.ampm = "午前"; だったり、this.ampm = "午後"; という行があることから、ご質問にあるコードは、思いつく限りでは、(1)何らかのクラスのメソッドに含まれる。あるいは(2) 何らかのfunction に含まれるコードで、この関数は実行されるときに何らかのオブジェクトに bind して実行される。というものだと思いましたが、いずれにしろ、this.ampm = "午前"; と this.ampm = "午後"; によって ”24個の何か” の それぞれのampm プロパティに"午前"または"午後"が設定されることを期待しており、それがうまくいってない、という状況のように推測しました。もしそうであれば、このコードの呼ばれるコンテキスト(背景)が分かるように、つまりthisに何が入ってくるか分かるような範囲のコードを掲載しないと、何とも言えない質問になっているかと思います。
yuuyu

2021/10/27 09:56

> 画面上はなぜか「午後」表記しかされないのです。 画面上に出力するコードはどこにありますか? コード1つ目をみる限りは、this.ampmに直接上書きをしているので最後の「午後」しか表示されませんし、 コード2つ目をみる限りは、条件分岐は正しく動作しているように見えます。
xxx0_0xxx

2021/10/28 00:41

「上書き」というご指摘まさにそのとおりでした。 if (0 <= h && h < 12) { return this.am = "午前"; } else if (12 <= h && h < 24) { return this.pm = "午後"; }; この条件で一旦変えてみたのですが、「午前午後」と表記されてしまいます。 HTML側のコードも追加したので、アドバイスいただけたらと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問