首页 > 解决方案 > 修改对象内部的值

问题描述

我正在尝试更改从 api 返回的对象,使其具有与我的应用程序中的另一个数据集类似的结构,并将它们推送到一个数组中。这样我就可以将此数据添加到我的原始数据中。但是我的 reduce 函数得到了一个奇怪的结果。

数据是这样进来的:

 {
  count: 4,
  datapoints: [
    {
      Date: "2021-05-22",
      score: 0,
    },
    {
      Date: "2021-05-23",
      score: 0,
    },
    {
      Date: "2021-05-24",
      score: 0,
    },
    {
      Date: "2021-05-25",
      score: 114,
    },
  ],
};

我有一个如下所示的 reduce 函数:

const riskScores = await api.PCC.riskAssessment(userID, startdate, endDate);

const riskScoresFormatted = riskScores.datapoints.reduce((result, data) => {
        const scores = result["riskAssessment"] || [];
        scores.push({
          value: data.score,
          unit: "none",
          recordedDate: data.Date,
          method: "none",
        });
        result["riskAssessment"] = scores;
        return result;
      });

当我安慰riskScoresFormatted我得到一些看起来像我想要的东西时,它的出现是新格式化的对象嵌套在第一个对象迭代中。像这样:

{ Date: "2021-05-22"
  riskAssessment: [{value: 0, unit: "none", recorded...}{...}] <- the data I need
  score: 0
}

所以我清楚地看到我做错了什么。我想用“riskAssessment”键将所有新格式化的对象推入一个数组中。谁能发现我做错了什么?

标签: javascriptarraysobjectreduce

解决方案


在函数结束时提供空数组[]作为数组的初始数据。reduce

const riskScoresFormatted = riskScores.datapoints.reduce((result, data) => {
        const scores = result["riskAssessment"] || [];
        scores.push({
          value: data.score,
          unit: "none",
          recordedDate: data.Date,
          method: "none",
        });
        result["riskAssessment"] = scores;
        return result;
      },[]);

输出

[
    {
        "value": 0,
        "unit": "none",
        "recordedDate": "2021-05-22",
        "method": "none"
    },
    {
        "value": 0,
        "unit": "none",
        "recordedDate": "2021-05-23",
        "method": "none"
    },
    {
        "value": 0,
        "unit": "none",
        "recordedDate": "2021-05-24",
        "method": "none"
    },
    {
        "value": 114,
        "unit": "none",
        "recordedDate": "2021-05-25",
        "method": "none"
    }
]

推荐阅读