【问题标题】:How do I increment a count in dart inside a loop?如何在循环内增加 dart 中的计数?
【发布时间】:2022-01-19 22:46:21
【问题描述】:

因此,我编写了一段 Javascript(我知道)等效代码,我想将其转换为 dart,但我在让计数器递增时遇到了一些麻烦。

这是 Javascript 等价物:

data.assessments.data.forEach((assessment) => {
        const { responses } = assessment.questionnaires[0];
        responses.forEach((response) => {
          response.value.forEach((moodValue) =>
            moodArr.push({
              value: toMoodMap(moodValue),
              count: (moodValue || 0) + 1, // I know this is crazy. This is what I want to replicate
              createdAt: moment(assessment.createdAt).format('YYYY-MM-DD'),
            })
          );
        });
      });

最终的数据集应如下所示:

[
    {
        "value": "Sad",
        "count": 2,
        "createdAt": "2021-12-08"
    },
    {
        "value": "Happy",
        "count": 1,
        "createdAt": "2021-12-08"
    },
    {
        "value": "Anxious",
        "count": 5,
        "createdAt": "2021-12-08"
    },
    {
        "value": "Happy",
        "count": 1,
        "createdAt": "2021-12-08"
    },
    {
        "value": "Tired",
        "count": 4,
        "createdAt": "2021-12-08"
    },
    {
        "value": "Energetic",
        "count": 3,
        "createdAt": "2021-12-08"
    },
    {
        "value": "Anxious",
        "count": 5,
        "createdAt": "2021-12-08"
    },
    {
        "value": "Happy",
        "count": 1,
        "createdAt": "2021-12-08"
    },
    {
        "value": "Sad",
        "count": 2,
        "createdAt": "2021-12-08"
    },
    {
        "value": "Happy",
        "count": 1,
        "createdAt": "2021-12-08"
    },
    {
        "value": "Happy",
        "count": 1,
        "createdAt": "2021-12-08"
    },
    {
        "value": "Anxious",
        "count": 5,
        "createdAt": "2021-12-08"
    },
    {
        "value": "Sad",
        "count": 2,
        "createdAt": "2021-12-08"
    },
    {
        "value": "Anxious",
        "count": 5,
        "createdAt": "2021-12-08"
    },
    {
        "value": "Anxious",
        "count": 5,
        "createdAt": "2021-12-08"
    },
    {
        "value": "Tired",
        "count": 4,
        "createdAt": "2021-12-08"
    },
    {
        "value": "Anxious",
        "count": 5,
        "createdAt": "2021-12-08"
    },
    {
        "value": "Anxious",
        "count": 5,
        "createdAt": "2021-12-08"
    },
    {
        "value": "Tired",
        "count": 4,
        "createdAt": "2021-12-09"
    },
    {
        "value": "Anxious",
        "count": 5,
        "createdAt": "2021-12-09"
    },
    {
        "value": "Sad",
        "count": 2,
        "createdAt": "2021-12-09"
    },
    {
        "value": "Energetic",
        "count": 3,
        "createdAt": "2021-12-13"
    },
    {
        "value": "Anxious",
        "count": 5,
        "createdAt": "2021-12-13"
    },
    {
        "value": "Tired",
        "count": 4,
        "createdAt": "2021-12-14"
    },
    {
        "value": "Happy",
        "count": 1,
        "createdAt": "2021-12-20"
    }
]

虽然不是超级理想,但它可以完成分组条形图的工作。这次我试图复制它,但使用charts_flutter

这是我尝试过的:

for (var assessment in assessments) {
          final List<dynamic> responses =
              assessment.questionnaires![0].savedResponses;
          final createdAt = assessment.createdAt as DateTime;

          for (var response in responses) {
            final moodValue = response['value'][0];
            moodData.add(MoodReading(
              value: Mood.mapMood(moodValue),
              count: (response['value'][0] || 0) + 1, // this doesn't work
              dateTime: createdAt,
            ));
          }
        }

我得到的错误是error: The operator '+' isn't defined for the type 'bool'.error: The operands of the operator '||' must be assignable to 'bool'.

有没有办法匹配类似那个 javascript 版本的东西?

【问题讨论】:

  • 我不知道 moodValue 在原始 JavaScript 代码中应该是什么,但我猜你可能想要像 (moodValue ?? 0) + 1 这样的东西(即,如果 moodValue 是 @987654330 @,使用默认值 0,然后加 1)。

标签: flutter dart


【解决方案1】:

我认为你正在尝试增加字符串值你可以试试这个代码

for (var assessment in assessments) {
          final List<dynamic> responses =
              assessment.questionnaires![0].savedResponses;
          final createdAt = assessment.createdAt as DateTime;

          for (var response in responses) {
            final moodValue = response['value'][0];
            moodData.add(MoodReading(
              value: Mood.mapMood(moodValue),
              count: (response['count'][0] || 0) + 1, // this doesn't work
              dateTime: createdAt,
            ));
          }
        }

【讨论】:

    猜你喜欢
    • 2017-06-19
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 2011-03-18
    • 1970-01-01
    • 2017-05-26
    相关资源
    最近更新 更多