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

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

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

React Nativeは、ネイティブモバイルアプリ(iOS/Android)を作成できるJavaScriptフレームワークです。Reactと同じ設計のため、宣言的なコンポーネントでリッチなUIを開発することが可能です。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

JavaScript

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

Q&A

解決済

1回答

1446閲覧

react nativeでfirestoreから取得したドキュメントをkeyとlabelに変換

sheckwes

総合スコア13

React Native

React Nativeは、ネイティブモバイルアプリ(iOS/Android)を作成できるJavaScriptフレームワークです。Reactと同じ設計のため、宣言的なコンポーネントでリッチなUIを開発することが可能です。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

JavaScript

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

0グッド

0クリップ

投稿2020/04/14 11:33

編集2020/04/14 12:08

実装したいこと

javascript

1const colors = db.colorsCollection.get() 2 .then(snapshot => { 3 snapshot.forEach((doc) => { 4 console.log(doc.data()); 5 console.log(doc.id); 6 }) 7 });

上記のコードでカラーコレクションのドキュメントを取得しています。
conosle.log()の結果は

Object { "name": "赤", } 1 Object { "name": "白", } 2 Object { "name": "黒", } 3 Object { "name": "青", } 4

となります。

この取得結果を

[ { key: 1, label: '赤' }, { key: 2, label: '白' }, { key: 3, label: '黒' }, { key: 4, label: '青' }, ];

に変換したいです。
ご教示いただけると幸いです:)

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

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

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

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

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

guest

回答1

0

ベストアンサー

まずforEach()を使っていることから既に配列を取得していることがわかりますね?そしてほしいものも配列です。配列から配列への変換へはmap()を利用すると便利です。
Array.prototype.map() - JavaScript | MDN
配列各々の要素に対して{ key: doc.id , value: doc.data().name }が返ってくるようにコールバック関数をわたしてあげればOKです。

投稿2020/04/14 12:10

A_kirisaki

総合スコア2853

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

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

sheckwes

2020/04/14 12:57

ご回答いただきありがとうございます。 forEach()の中でmap()を使うんですかね。 あまり理解できていなくて:( ご教示いただけると幸いです。
A_kirisaki

2020/04/14 13:21

`forEach()`の「代わり」に`map()`です。この2つの関数の違いは戻り値があるかないかだけです。`forEach()`は中の関数で実行した結果(例であれば`console.log()`の結果)を捨てています。表示されているから捨ててないじゃないか、と思うかもしれませんが関数的には何も(実際は`undefined`という値)返ってきていません。表示されている結果は難しい言葉で「副作用」と呼び、関数の戻り値としては何も返ってきていないのです。 `map()`関数は中の関数で戻り値が発生した場合それを拾い集めて配列にして返します。例えばこんな感じです。 ```js xs = [1, 2, 3] xs.map(x => x *2) // [2,4,6] ``` 配列から`1`、`2`、`3`が次々渡され、関数の中で2倍されて返され、それが拾い集められて`[2 , 4, 6]`を作ります。同じように`data()`と`id`の入ったオブジェクトが次々渡されそれを関数の中で`{ key: doc.id , value: doc.data().name }`のかたちに組み立てそれを返してやれば望む配列を得られる、といったことになります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問