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

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

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

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Q&A

解決済

1回答

444閲覧

map.getにから配列が入る理由がわかりません。

dai987

総合スコア5

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

0グッド

0クリップ

投稿2020/09/07 14:29

編集2020/09/08 02:09

前提・実現したいこと

連想配列から同じ日付のものだけ取り出して新しい配列を作りたい。

該当のソースコード

vue

1 2data: { 3todos: [ 4 {task: '1', date: '2020/9/1'}, 5 {task: '2', date: '2020/9/1'}, 6 {task: '3', date: '2020/9/2'}, 7 {task: '4', date: '2020/9/2'}, 8 {task: '5', date: '2020/9/2'}, 9 {task: '6', date: '2020/9/2'}, 10 {task: '7', date: '2020/9/3'}, 11 {task: '8', date: '2020/9/3'}, 12 {task: '9', date: '2020/9/3'}, 13 ], 14} 15 16computed:{ 17 item() { 18 19 const groupingMap = this.todos.reduce( 20 (map, e) => map.set(e.date, [ ...(map.get(e.date) || []), e] ), new Map()) 21 22 return [...groupingMap].filter(([date, array]) => array.length > 1 ) 23 24 }, 25}

試したこと

dateをキーとしてtaskの配列へのMapを作っていると思うのですが、map.getのあとのから配列とその後のeの意味がわからないです。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

equal-l2

2020/09/07 16:00

`endTask`の定義がわからないと回答できません。
dai987

2020/09/08 02:11

申し訳ありません。 todosをendTaskと誤って書いていました。
guest

回答1

0

ベストアンサー

[ ...(map.get(e.date) || []), e]
わからないのはこの部分ということですね。

...spread syntaxと呼ばれるもので、配列の要素を取り出して並べるのと同じ効果を持ちます。
例えば、[...[1, 2], 3][1, 2, 3]と同じになります。

spread syntaxは要素を取り出す対象の配列を要求するわけですが、map.get(e.date)undefinedを返す場合があります。この場合undefinedは配列ではないのでエラーになってしまいます。
map.get(e.date) || []とすることで、undefinedが返ってきた際に空配列を代わりに使うことができます。

これによって、この式は「map.get(e.date)の末尾にeを付け加えた配列」(ただしmap.get(e.date)undefinedの時は[e])を返すことになります。

投稿2020/09/08 02:43

equal-l2

総合スコア172

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問