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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

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

Q&A

解決済

1回答

510閲覧

値の範囲によって表示を変える記述について、煩雑になるのでスッキリさせたい。

Avent

総合スコア47

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

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

0グッド

1クリップ

投稿2021/06/25 18:46

タイトルの通り、値の範囲によって送るメッセージを変えたいです。
自力で実装したものは以下のとおりです。

js

1 if(!(key in protectionAlarted)){ 2 protectionAlarted[key] = 0; 3 } else if(protectionAlarted[key] != 10 && protectionRemaining == 0) { 4 SendDistortionMessage("が風化しています。", entity); 5 protectionAlarted[key] = 10 6 } else if(protectionAlarted[key] != 9 && protectionRemaining < 300) { 7 SendDistortionMessage("の残り維持期間が5分未満です。", entity); 8 protectionAlarted[key] = 9 9 } else if(protectionAlarted[key] != 8 && protectionRemaining < 600) { 10 SendDistortionMessage("の残り維持期間が10分未満です。", entity); 11 protectionAlarted[key] = 8 12 } else if(protectionAlarted[key] != 7 && protectionRemaining < 900) { 13 SendDistortionMessage("の残り維持期間が15分未満です。", entity); 14 protectionAlarted[key] = 7 15 } else if(protectionAlarted[key] != 6 && protectionRemaining < 1800) { 16 SendDistortionMessage("の残り維持期間が30分未満です。", entity); 17 protectionAlarted[key] = 6 18 } else if(protectionAlarted[key] != 5 && protectionRemaining < 3600) { 19 SendDistortionMessage("の残り維持期間が1時間未満です。", entity); 20 protectionAlarted[key] = 5 21 } else if(protectionAlarted[key] != 4 && protectionRemaining < 10800) { 22 SendDistortionMessage("の残り維持期間が3時間未満です。", entity); 23 protectionAlarted[key] = 4 24 } else if(protectionAlarted[key] != 3 && protectionRemaining < 21600) { 25 SendDistortionMessage("の残り維持期間が6時間未満です。", entity); 26 protectionAlarted[key] = 3 27 } else if(protectionAlarted[key] != 2 && protectionRemaining < 43200) { 28 SendDistortionMessage("の残り維持期間が12時間未満です。", entity); 29 protectionAlarted[key] = 2 30 } else if(protectionAlarted[key] != 1 && protectionRemaining < 86400) { 31 SendDistortionMessage("の残り維持期間が1日未満です。", entity); 32 protectionAlarted[key] = 1 33 } else if(protectionRemaining >= 86400){ 34 protectionAlarted[key] = 0 35 }

要件としては、毎分protectionRemainingを取得し、値の範囲によって状態が決まります。そして、前回と状態が違うときだけメッセージを送信します。
同じようなものが連なっており、これをきれいに書く方法があるのか気になり質問させていただきました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

最初と最後だけ例外的な処理が発生しますが、途中はループで判定できると思います。
例えば、こんな感じです。もっと良い書き方があるかもしれませんが。

js

1a = [ 2 {"key":10, "pr": 0, "msg":"が風化しています。"}, 3 {"key": 9, "pr": 300, "msg":"5分未満です。"}, 4 {"key": 8, "pr": 600, "msg":"10分未満です。"}, 5 {"key": 7, "pr": 900, "msg":"15分未満です。"}, 6 {"key": 6, "pr": 1800, "msg":"30分未満です。"}, 7 {"key": 5, "pr": 3600, "msg":"1時間未満です。"}, 8 {"key": 4, "pr":10800, "msg":"3時間未満です。"}, 9 {"key": 3, "pr":21600, "msg":"6時間未満です。"}, 10 {"key": 2, "pr":43200, "msg":"12時間未満です。"}, 11 {"key": 1, "pr":86400, "msg":"1日未満です。"} 12] 13 14key = 6 15pr = 2000 16 17if (key!=a[0].key && pr==a[0].pr){ 18 19 console.log (a[0].msg) 20 key=a[0].key 21 22} else { 23 24 for (i=1; i<=9; i++){ 25 if (key!=a[i].key && pr<a[i].pr){ 26 console.log ("の残り維持期間が" + a[i].msg); 27 key=a[i].key; 28 break; 29 } 30 } 31 32} 33 34if (pr>a[9].pr) 35 key=0; 36

投稿2021/06/25 22:06

ak.n

総合スコア291

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

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

Avent

2021/06/26 14:54

おお!最高です! ありがとうございます‼
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問