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

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

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

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

TypeScript

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

React.js

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

Q&A

解決済

1回答

880閲覧

react 複雑な条件分岐

whiwhdiw

総合スコア70

JavaScript

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

TypeScript

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

React.js

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

0グッド

0クリップ

投稿2020/03/17 07:29

下記の構文はどういうことをしているのでしょうか?
groupsをmapで一つ一つ回して state.selectGroupの中からgroupsのIdと同じのがあればnull を返しなければgを返す。
その後にその値をselectGroupに入れているということでしょうか?

const addGroups = (groups: Groups[]) => { const newGroups = groups.map((g) => { const Groups = state.selectGroups.find((selectGroup) => selectGroup.id === g.id); return Groups ? null : g; }).filter(Boolean); setState({ ...state, selectGroups: [...state.selectedGroups,Groups] }); };

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

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

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

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

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

nerianighthawk

2020/03/17 07:39

selectGroups: [...state.selectedGroups,Groups] は selectGroups: [...state.selectedGroups, newGroups] の間違いでしょうか? また、.filter(Boolean)は意味がないと思うのですが、仮に書いているだけの状態でしょうか?
nerianighthawk

2020/03/17 07:41

すみません、.filter(Boolean)が意味がないと言いましたが、書く意味はありました。
whiwhdiw

2020/03/17 07:43

const newGroups = groups.map((g) => { const Groups = state.selectGroups.find((selectGroup) => selectGroup.id === g.id); return Groups ? null : g; }).filter(Boolean);
whiwhdiw

2020/03/17 07:43

ここのfilter(Boolean) って何をしているのでしょうか?
nerianighthawk

2020/03/17 07:52

Boolean は Boolean Constructor で、引数がある場合はその引数に応じて真偽値が返ります。 Boolean(null)の場合はfalseが返ってきます。 一方 filter は戻り値が true のものを抽出する高階関数です。 その前の map 関数で、不必要な値は null にしているため、次の filter で null の物は false として扱われ、削除されます。
guest

回答1

0

ベストアンサー

処理の内容はwhiwhdiwさんの認識であっていると思います。
しかし、わざわざ値をnullにした後にfilterにかける意味はないかと思います。
以下のように記述できるかと思います。

TypeScript

1 const addGroups = (groups: Groups[]) => { 2 const newGroups = groups.filter((g) => { 3 const Groups = 4 state.selectGroups.find((selectGroup) => selectGroup.id === g.id); 5 return Groups === undefined; 6 }) 7 setState({ 8 ...state, 9 selectGroups: [...state.selectedGroups, ...newGroups] 10 }); 11 };

投稿2020/03/17 07:47

編集2020/03/17 08:07
nerianighthawk

総合スコア544

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

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

whiwhdiw

2020/03/17 08:04

これって値がある時もない時もstateに登録されるという認識で合っているでしょうか?
nerianighthawk

2020/03/17 08:09

newGroupsも展開する必要があったので、修正しました。 newGroupsに値がない時は空の配列になっているので、元々の selectGroups が登録されます。 変更がない場合でも setState の処理は走りますね。
miyabi-sun

2020/03/17 08:24

> `selectGroups: [...state.selectedGroups, ...newGroups]` 質問文のこの箇所読んでて「ん?ってなってましたが」 しっかり手直しされてますねGJ ただ、質問文のコードが不具合の元になりそうですから、 ちゃんと解答文にしておいたほうが良いかもしれませんね…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問