减少数组中包装数据的函数
Reduce function wrapping data in an array
我有一个 reduce 函数,可以按照我需要的方式格式化我的数据,但唯一的问题是数据嵌套在数组中。我需要删除外部数组或只是停止将其添加到 reduce 函数中,但我为阻止 reducer 将数据包装在数组中所做的每一次尝试都会破坏我的代码。理想情况下,我希望我的 reducer 不将数据包装在一个数组中,但如果那不可能,那么从 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,
},
],
};
我的 reducer 函数和 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)
只是 returns 一个空数组。我还尝试将第一个项目作为目标,例如 riskScoresFormatted.riskAssessment
这可行,但该值有时为空,因此稍后会导致错误。
尝试将最终的 reduce 参数从 []
更改为 {}
,我认为你的运气会更好。
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);
我有一个 reduce 函数,可以按照我需要的方式格式化我的数据,但唯一的问题是数据嵌套在数组中。我需要删除外部数组或只是停止将其添加到 reduce 函数中,但我为阻止 reducer 将数据包装在数组中所做的每一次尝试都会破坏我的代码。理想情况下,我希望我的 reducer 不将数据包装在一个数组中,但如果那不可能,那么从 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,
},
],
};
我的 reducer 函数和 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)
只是 returns 一个空数组。我还尝试将第一个项目作为目标,例如 riskScoresFormatted.riskAssessment
这可行,但该值有时为空,因此稍后会导致错误。
尝试将最终的 reduce 参数从 []
更改为 {}
,我认为你的运气会更好。
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);