首页 > 解决方案 > 减少将数据包装在数组中的函数

问题描述

我有一个 reduce 函数,可以按照我需要的方式格式化我的数据,但唯一的问题是数据嵌套在数组中。我需要删除外部数组或只是阻止reduce函数添加它,但我所做的每一次阻止reducer将数据包装在数组中的尝试都会破坏我的代码。理想情况下,我希望我的减速器不将数据包装在数组中,但如果不可能从减速器内部干净地删除我需要的数组,这似乎是唯一的解决方案:

我的数据如下所示:

{
  count: 4,
  datapoints: [
    {
      Date: "2021-05-05",
      score: 0,
    },
    {
      Date: "2021-05-12",
      score: 0,
    },
    {
      Date: "2021-05-30",
      score: 0,
    },
    {
      Date: "2021-06-03",
      score: 114,
    },
  ],
};

我的减速器函数和 api 调用:

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",
          type: "riskAssessment",
        });
        result["riskAssessment"] = scores;
        return result;
      }, []);

输出:

[riskAssessment: [{…}, {…}, {…}, {…}] ]

我试过只使用riskScoresFormatted[0]返回未定义的索引。riskScoresFormatted.slice(1)只返回一个空数组。我也尝试过像这样针对第一个项目,riskScoresFormatted.riskAssessment但该值有时为空,因此稍后会导致错误。

标签: javascriptarraysobjectreduce

解决方案


尝试将最后的 reduce 参数从[]to更改{},我认为你会有更好的运气。

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

或者,Array.map()改用:

const riskScores = {
  count: 4,
  datapoints: [{
      Date: "2021-05-05",
      score: 0,
    },
    {
      Date: "2021-05-12",
      score: 0,
    },
    {
      Date: "2021-05-30",
      score: 0,
    },
    {
      Date: "2021-06-03",
      score: 114,
    },
  ],
};

var riskScoresFormatted = riskScores.datapoints.map((data) => ({
  value: data.score,
  unit: "none",
  recordedDate: data.Date,
  method: "none",
  type: "riskAssessment",
}));

console.log(riskScoresFormatted);


推荐阅读