teratail
質問するログイン新規登録

Q&A

解決済

1回答

1280閲覧

複数条件の[IF文]を綺麗に書きたい【Javascript】

progblog

総合スコア22

JavaScript

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

1クリップ

投稿2021/02/23 11:00

編集NaN/aN/aN aN:aN

0

1

実現したいこと

複雑になりすぎたIF文 を簡潔にしたい。

やりたいこと

データベースに保存したデータを取得し、HTML に挿入する。

具体的には、Twitter など他サービスへのリンクをマイページに挿入したい。
データベースにはTwitter ID のみが保存されている。

const twitterCode = '<p class="twitter"><a href="https://twitter.com/' + twitterID + '"><span><i class=" fab fa-twitter"></i></span></a></p>'

上記のようなソースをHTML に挿入する。

対象となるのは3つのサービス。

ただユーザー側で登録するので、3つのうち2つ、1つだけの登録も当然ある。

作成したソース

const linkAdd = document.querySelector('.user_link') const twitterCode = '<p class="twitter"><a href="https://twitter.com/' + twitter + '"><span><i class=" fab fa-twitter"></i></span></a></p>' const instagramCode = '<p class="instagram"><a href="https://www.instagram.com/' + instagram + '"><span><i class="fab fa-instagram"></i></span></a></p>' const customCode = '<p class="custom"><a href="' + custom + '"><span><i class="fas fa-at"></i></span></a></p>' if(twitter == '') { linkAdd.innerHTML = instagramCode + customCode; } else if (instagram == '') { linkAdd.innerHTML = twitterCode + customCode; } else if (custom == '') { linkAdd.innerHTML = twitterCode + instagramCode; // 2つ空の時のソースを省略 } else { linkAdd.innerHTML = twitterCode + instagramCode + customCode; }

質問内容

上記のソースをみていただくとわかりますが、IF文 の条件が多く、複雑に見えるソースになってしまいました。
こちらのソースを簡潔にできる考え方がなどはありますでしょうか。

ご回答いただきますと幸いでございます。

追記

すみません。
質問するにあたりソースを改変したので、わかりにくくなりました。
追記させていただきます。

実際のソース

const linkAdd = document.querySelector('.user_link') const twitterCode = '<p class="twitter"><a href="https://twitter.com/' + doc.data().twitter + '"><span><i class=" fab fa-twitter"></i></span></a></p>' const instagramCode = '<p class="instagram"><a href="https://www.instagram.com/' + doc.data().instagram + '"><span><i class="fab fa-instagram"></i></span></a></p>' const customCode = '<p class="custom"><a href="' + doc.data().custom + '"><span><i class="fas fa-at"></i></span></a></p>' if(doc.data().twitter == '') { linkAdd.innerHTML = instagramCode + customCode; } else if (doc.data().instagram == '') { linkAdd.innerHTML = twitterCode + customCode; } else if (doc.data().custom == '') { linkAdd.innerHTML = twitterCode + instagramCode; } else { linkAdd.innerHTML = twitterCode + instagramCode + customCode; }

条件式で使われている変数はどこでどのように定義されるのでしょう。

ソースの改変でわかりにくくし申し訳ございません。
firebase のコレクションを参照しています。

データベースにはTwitter ID のみが保存されている。
という点もありますし、
データベースの値をどのように取得するかとか、テーブル定義とか。

firebase のコレクションをそれぞれ、doc.data().twitter, doc.data().instagram, doc.data().custom, で参照しております。
また参照できていることは確認できています。

データベースはシンプルに下記になります。

userId ├ twitter: '' ├ instagram: '' └ custom: ''

twitter が '' の時は、instagram や custom が '' でも instagramCode + customCode が出力されてしまいますが、それで大丈夫でしょうか? まず、条件を日本語できっちり書いてみては。

良くないです。
質問が下手で申し訳ございません。
おっしゃる通り、ユーザーが投稿したもの、つまり値があるものだけをHTMLに挿入したいです。
ただその記述をすべて条件式で書くと相当まどろっこしいので、簡潔に簡潔に書ける方法を知りたく質問させていただきました。

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

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

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

m.ts10806

2021/02/23 11:05

条件式で使われている変数はどこでどのように定義されるのでしょう。
m.ts10806

2021/02/23 11:06

>データベースにはTwitter ID のみが保存されている。 という点もありますし、 データベースの値をどのように取得するかとか、テーブル定義とか。
hoshi-takanori

2021/02/23 11:33

twitter が '' の時は、instagram や custom が '' でも instagramCode + customCode が出力されてしまいますが、それで大丈夫でしょうか? まず、条件を日本語できっちり書いてみては。
progblog

2021/02/23 12:36

ありがとうございます。 質問の方に追記しました。 もしお手すきであればご確認いただけますと幸いでございます。
guest

回答の取得に失敗しました

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

ただいまの回答率
%

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

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

質問する

関連した質問