gpt4 book ai didi

JavaScript 减少函数问题

转载 作者:行者123 更新时间:2023-12-03 03:47:10 25 4
gpt4 key购买 nike

我正在使用 JavaScript (Es6) 调用 API,该 API 返回 JSON 对象。

首先,我返回的 JSON 示例如下:https://pastebin.com/PrLc2pFD

一旦我得到了上面返回的 JSON,我就会使用映射函数创建一个名为 array 的新对象。我正在使用reduce 将一些嵌套和重复的项目求和。

下面是我的代码片段:

var array = response.data.map(function(item, array) {


var sumTaskTotal = item.jobTasks.reduce(function(sumTaskTotal, elem) {
if (elem !== null && elem.sumTaskTotal !== null) {
return +(elem.total && elem.total.amountString ? elem.total.amountString : 0);
}
}, 0);

var sumCostBillable = item.jobTasks.reduce(function(sumCostBillable, elem) {
if (elem !== null && elem.totalCostBillable !== null) {
return +(elem.totalCostBillable && elem.totalCostBillable.amountString ? elem.totalCostBillable.amountString : 0);
}
}, 0);

var sumThirdPartyCost = item.jobThirdPartyCosts.reduce(function(sumThirdPartyCost, elem) {
if (elem !== null && elem.total !== null) {
return +(elem.cost && elem.cost.amountString ? elem.cost.amountString : 0);
}
}, 0);

var sumInvoices = item.invoices.reduce(function(sumInvoices, elem) {
if (elem !== null && elem.invoice !== null) {
return +(elem.invoicedNet && elem.invoicedNet.amountString ? elem.invoicedNet.amountString : 0);
}
}, 0);

array = response.data.map(item => ({
id: item.id,
jobNumber: item.jobNumber,
jobStateType: item.jobStateType,
jobBillingStateType: item.jobBillingStateType,
startDate: dateformat(item.jobStartDate, "yyyy-mm-dd"),
internalDeadline: dateformat(item.internalDeadline, "yyyy-mm-dd"),
potentialValue: item.potentialValue.amountString,
estimatedValue: item.estimatedSellValue.amountString,
billedNet: sumInvoices,
sumTaskTotal: sumTaskTotal,
sumCostBillable: sumCostBillable,
sumThirdPartyCost: sumThirdPartyCost,
jobDetailId: item.jobDetailId
}));

以下reduce函数可以正常工作:sumTaskTotal、sumCostBillable、sumThirdPartyCost

他们正在做的是检查字段是否存在,如果存在,则进行归约和求和。如果不是,则设置为 0。

工作的是:发票总和

我不太明白为什么,我没有收到任何错误,我总是只是返回“0”,如下所示console.log(array)

{ id: 2352162,
jobNumber: '2015T1151',
jobStateType: 'PROGRESS',
jobBillingStateType: 'NOT_BILLED',
startDate: '2017-07-26',
internalDeadline: '2017-07-24',
potentialValue: 190,
estimatedValue: 9500,
billedNet: 0,
sumTaskTotal: 9500,
sumCostBillable: 75,
sumThirdPartyCost: 11,
jobDetailId: 2679930 }

最佳答案

var sumInvoices = item.invoices.reduce(function(sumInvoices, elem) {
if (elem !== null && elem.invoice !== null) {
return +(elem.invoicedNet && elem.invoicedNet.amountString ? elem.invoicedNet.amountString : 0);
}
return sumInvoices; // <--------------------add this
}, 0);

正如 Pointy 所评论的,您需要添加一个 return 语句。为了避免任何其他问题,您还应该向您正在使用的每个reduce 添加areturn 语句。

关于JavaScript 减少函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45340306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com