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

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

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

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

JavaScript

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

Q&A

解決済

5回答

63726閲覧

if文の条件式が複数あるときのスマートな書き方

rera

総合スコア109

Node.js

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

JavaScript

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

2グッド

10クリップ

投稿2017/02/13 08:44

タイトル通りなのですが、例えば条件式が
hoge === '123'みたいな条件式が10個ぐらいな大量の場合にスマートな書き方ってあるのでしょうか?

現在はインデントを揃えて例えば

javascript

1if (obj_key === '1' || obj_key === '2' || obj_key === '3' 2 || obj_key === '6' || obj_key === '5' || obj_key === '4' 3 || obj_key === '7' || obj_key === '8' || obj_key === '9' 4 || obj_key === '12' || obj_key === '11' || obj_key === '10' 5 || obj_key === '13' || obj_key === '14' 6 || typeof(obj_key) === 'number') {

こんな感じにしています。

この例だと比較対象が数字なのでちょっとは見やすいですが数字ではなく文字になったとき
更に醜くなると感じています。

こういった場合なスマートな書き方ってあるのでしょうか?

take-t.t., oil👍を押しています

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

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

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

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

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

guest

回答5

0

ベストアンサー

判定すべき値が将来的に文字列になるということなので、Arrays.prototype.includesを使って判定をすっきりさせてみました。

JavaScript

1var array = ['1','2','3','4','5','6','7','8','9','10','11','12','13','14']; 2if(array.includes(obj_key) || typeof(obj_key) === 'number') { 3}

投稿2017/02/13 08:50

masaya_ohashi

総合スコア9210

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

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

rera

2017/02/13 10:09

とてもわかり易く見た目も良くなりますね! array.includesは初めて知りました。ありがとうございますm(_ _)m
guest

0

私の場合よく使うのが

js

1if(['1', '2', '3', '4', (以下略)].includes(obj_key))

ですね。

投稿2017/02/13 08:50

turbgraphics200

総合スコア4269

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

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

0

ほかの言語でanyと呼ばれる関数がsomeとしてあるようです。
引数に関数をとるのでスマートに書くには一工夫いりそうですが・・・

javascript

1var arr = ['1', '2', '3']; 2if(arr.some(function(n) {return n == obj_key;}){ 3 4}

ネタ元
http://yuuxxxx.hatenablog.com/entry/2014/07/17/235735
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/some

投稿2017/02/13 08:59

編集2017/02/13 09:01
iwamoto_takaaki

総合スコア2883

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

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

0

array.includes(obj_key)
とかでどうですか。

投稿2017/02/13 08:51

編集2017/02/13 08:53
mugicya

総合スコア1046

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

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

0

チェックするデータを配列で保持しておき、ループを回してチェックするのがコード量は減ると思います。データは配列の初期値としてセットしておけばいいので、何とチェックしているかはわかりやすくはなるかと。
チェックする箇所が複数ある場合その都度ループを組んでいたら大変なので、チェック用の関数を作って、それを呼び出す形にしておくのが良いでしょう。
チェック対象を引数で渡せばチェック対象の変数が変わっても対応がとれます。

java

1 if (isKeyOk(obj_key)) { 2

投稿2017/02/13 08:54

PineMatsu

総合スコア3579

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

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

PineMatsu

2017/02/13 08:56

Javaならarray.includesがあるんだ。そっちのほうが簡単ですね。
mugicya

2017/02/13 08:58

便利ですよねえ
PineMatsu

2017/02/13 09:03

ですね。 c++でもコンテナでfindなどのアルゴリズム関数を使えば出来ますけどね。
KiyoshiMotoki

2017/02/13 09:06

> Javaならarray.includesがあるんだ。 Java ではなく、Javascript ですよ。
PineMatsu

2017/02/13 09:09

Javaはcontainsか・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問