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

回答編集履歴

1

1

2021/09/15 12:40

投稿

takasima20
takasima20

スコア7468

answer CHANGED
@@ -1,3 +1,31 @@
1
1
  forEach で指定するのはコールバックですからね。
2
2
 
3
- 素直に for (x of dateList) { ... } 使えば?
3
+ 素直に for (x of dateList) { ... } 使えば?
4
+ --- 追記 ---
5
+ コールバックではループで使用する「関数」を指定しますから、ループの中と外では参照/更新できるものとできないものがあるので、そのへん慎重にコーディングする必要があります。
6
+ 一方、上記を使えばそのような制限はないので手軽にコードを書けます。
7
+ ```javascript
8
+ for (element of dateList) {
9
+ db.collection("users").doc(userId).collection("time").doc(element).get().then((snapshot)=>{
10
+
11
+ if (snapshot.data() !== undefined) {
12
+
13
+ scores = snapshot.data().toMinutes;
14
+
15
+ //ここに式を入れればいいと思ったのですが…
16
+ //以下は色々試したなかの一つです。
17
+
18
+ let result = [scores];
19
+ let total = result.reduce(function(sum, element){
20
+ return sum + element;
21
+ }, 0);
22
+ console.log(total)
23
+ //ここまで
24
+
25
+ } else {
26
+
27
+ }
28
+ }
29
+ ```
30
+ たとえば、ループ内で計算した値を集計したいならば、ループ前に初期化してループ内で順次集計すればいいだけです。
31
+ ちなみに、全角空白がまじってるので半角空白に修正した方がいいと思います。