如何使用foreach获取Nodejs中的数组总和?

时间:2018-04-11 06:14:51

标签: javascript node.js mongoose schema

我有一个名为" 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});   
        }

    });

  });

2 个答案:

答案 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