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

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

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

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

1回答

233閲覧

mapやfilterでアイテムがない場合に違う内容を表示したい

lolop

総合スコア1

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

1グッド

1クリップ

投稿2021/02/19 09:49

編集2021/02/19 11:05

先日、こちらの質問 をさせていただいたのですが、更にわからないことがあったので質問させていただきました。
回答していただいたこちらのコードで実行したところ正常に表示できたのですが、

React

1{this.props.projects.map(project => ( 2 category.id == project.category.id && 3 <div key={project.id} className="project" > 4 <div className="project-box"> 5 <p>{project.name}</p> 6 </div> 7 </div> 8))}

下記のコードのようにカテゴリーに該当するプロジェクトがなかった場合に<p>なし</p>を返そうとすると、本来は下図の1のように1プロジェクトが一つもないカテゴリーの欄だけに一回だけ「なし」と表示したのですが下図の2ように大量に「なし」が表示されてしまいます。

React

1{this.props.projects.map(project => ( 2 category.id == project.category.id ? 3 <div key={project.id} className="project" > 4 <div className="project-box"> 5 <p>{project.name}</p> 6 </div> 7 </div> 8 : 9 <p>なし</p> 10))} 11

イメージ説明

いろいろ調べてみて、filterでも試してみたのですがfilterを使用したとき条件に合わない場合は違う結果を表示させることは可能なのでしょうか。

React

1{this.props.projects.filter(project => category.id == project.category.id).map(project => { 2 return ( 3 <div> 4 <p>{project.name}</p> 5 </div> 6 ) 7})}

また、map内で判定する方法もやってみたのですがこの場合も上記のような現象が起こってしまいます。

React

1{this.props.projects.map(project => { 2 if (category.id == project.category.id) { 3 return ( 4 <p>a</p> 5 ) 6 } else { 7 return ( 8 <p>b</p> 9 ) 10 11 } 12})}
HiroLLK👍を押しています

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

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

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

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

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

mikan3rd

2021/02/22 14:19 編集

>図の1のように1プロジェクトが一つもないカテゴリーの欄だけに一回だけ「なし」と表示したのですが下図の2ように大量に「なし」が表示されてしまいます。 上記の記述とは逆に大量に「なし」が表示されているのは図1の方ですが、図1と図2どちらが正しい表示なのでしょうか?
hoshi-takanori

2021/02/24 00:40

filter の結果をいったん変数に入れて、空なら「なし」と表示すれば良いのでは。
guest

回答1

0

先にプロジェクトが一つもない場合をチェックするようにすれば良いのではないでしょうか?

jsx

1 if (this.props.projects.every(project => category.id !== project.category.id)) { 2 return (<p>なし</p>) 3 } 4 return ( 5 {this.props.projects.map(project => ( 6 <div key={project.id} className="project" > 7 <div className="project-box"> 8 <p>{project.name}</p> 9 </div> 10 </div> 11 ))} 12 );

投稿2021/02/22 14:26

mikan3rd

総合スコア220

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問