我有一个名为" plants"的数组/模式,并填充在网页上。我想得到工厂费率的总和(最后一项)。我怎么能在Nodejs中做到这一点?
下面是显示植物表的模板,其中包含来自模式的数据:
<% project.plants.forEach(function(plant){ %>
<tr>
<td class="td14" ><%= plant.noplant %></td>
<td class="td15" ><%= plant.plantname %></td>
<td class="td16" ><%= plant.planthrperday %></td>
<td class="td17" ><%= plant.plantnodays %></td>
<td class="td18" ><%= plant.planthrrate %></td>
<td class="td19" ><%= plant.plantdep %></td>
<td class="td20" ><%= plant.plantrate %></td>
<td class="td21"><a href=""><button type="button" class="btn btn-danger">Remove</button></a></td>
</tr>
<% }); %>
路线处理程序:
app.get("/myprojects/:id/cost", function(req,res){
Project.findById(req.params.id).populate("labours materials tools plants others").exec(function(err, foundProject){
if(err){
console.log(err);
}else{
res.render("cost", {project: foundProject});
}
});
});
答案 0 :(得分:3)
您可以按如下方式使用reduce
:
const plantsRateSum = project.plants.reduce((accumulator, currValue) =>{
return acumulator + currValue.plantrate;
}, 0);
Docs: Array.prototype.reduce()
或者在您的特定情况下,在获得植物数组后计算总和:
Project.findById(req.params.id).populate("labours materials tools plants others").exec(function (err, foundProject) {
if (err) {
console.log(err);
} else {
const plantsRateSum = foundProject.reduce((accumulator, currValue) => {
return acumulator + currValue.plantrate;
}, 0);
res.render("cost", { project: foundProject, plantsRateSum: plantsRateSum });
}
});
答案 1 :(得分:1)
您可以在模板中执行此操作,方法是在https://{your-app-name}.scm.azurewebsites.net/api/vfs/LogFiles/Application/index.html
plantRateSum
并将plantrate
添加到该变量
forEach
但这不是一个好方法,而是你应该使用<% var plantRateSum = 0; %>
<% project.plants.forEach(function(plant){ %>
<% plantRateSum += plant.plantrate %>
enter code here
<tr>
<td class="td14" ><%= plant.noplant %></td>
<td class="td15" ><%= plant.plantname %></td>
<td class="td16" ><%= plant.planthrperday %></td>
<td class="td17" ><%= plant.plantnodays %></td>
<td class="td18" ><%= plant.planthrrate %></td>
<td class="td19" ><%= plant.plantdep %></td>
<td class="td20" ><%= plant.plantrate %></td>
<td class="td21"><a href=""><button type="button" class="btn btn-danger">Remove</button></a></td>
</tr>
<% }); %>
方法从路由处理程序中将工厂费率总和发送给模板,如下所示:
reduce
现在将此const plantRateSum = project.plants.reduce(function(sum, plant){
return sum + plant.plantrate;
}, 0);
传递给模板。
在您的路线处理程序中执行以下操作:
plantRateSum