首页 > 解决方案 > JavaScript 比较对象原型并将它们相加

问题描述

我遇到了一个 JavaScript 练习,我需要在 JavaScript 中创建一个脚本,用户插入月份和雨的 ML 属于那个月,程序将返回一个包含月份和雨的表,但它需要总结重复月份的降雨量,例如一月重复三次,因此表格需要显示这三个月的总和。

我这样做了,但是在重复月份继续循环两次,我不知道在重复月份的总和之后如何打破它,这里是代码:

var proceed = true;

function Mes(mes, lluvia) {
  this.month = mes;
  this.rain = lluvia;
}

datos = [];

meses = ["Enero", "Febrero"];

while (proceed) {
  var mes = prompt("Ingresa el mes", "");
  var lluvia = parseInt(prompt("Ingrese los ml de lluvia correspondiente al mes", ""));

  new Mes(mes, lluvia);
  datos.push(new Mes(mes, lluvia));
  proceed = confirm("Deseas continuar?");
}


for (var j = 0; j < datos.length; j++) {
  if (datos[j].month == meses[0]) {
    var initialValue = 0;
    var sum = datos.reduce(function(accumulator, currentValue) {
      return accumulator + currentValue.rain;
    }, initialValue)
    //document.write("El acumulado de todos los meses ingresados es de " + sum);

    document.write("<table>");
    document.write("<tr>");
    document.write("<td>" + datos[j].month + "</td>");
    document.write("<td>" + sum + "</td>");
    document.write("</tr>");
    document.write("</table>");
  } else {
    document.write("<table>");
    document.write("<tr>");
    document.write("<td>" + datos[j].month + "</td>");
    document.write("<td>" + datos[j].rain + "</td>");
    document.write("</tr>");
    document.write("</table>");
  }
}

标签: javascriptarraysprototypejavascript-objects

解决方案


创建一个对象,其键是月份名称,值是总降雨量。循环遍历您的阵列并将每个降雨量添加到适当的总数中。

此外,您应该只创建一个表;循环应该只创建行。

var proceed = true;

function Mes(mes, lluvia) {
  this.month = mes;
  this.rain = lluvia;
}

datos = [];

meses = ["Enero", "Febrero"];

while (proceed) {
  var mes = prompt("Ingresa el mes", "");
  if (meses.includes(mes)) {
    var lluvia = parseInt(prompt("Ingrese los ml de lluvia correspondiente al mes", ""));
    datos.push(new Mes(mes, lluvia));
  } else {
    alert("Mal mes");
  }
  proceed = confirm("Deseas continuar?");
}

var totals = datos.reduce((obj, {month, rain}) => {
  if (month in obj) {
    obj[month] += rain;
  } else {
    obj[month] = rain;
  }
  return obj;
}, {});

document.write("<table>");
document.write("<tr><th>Mes</th><th>Total</th></tr>");

meses.forEach(month => {
  document.write("<tr>");
  document.write("<td>" + month + "</td>");
  document.write("<td>" + totals[month] + "</td>");
  document.write("</tr>");
});
document.write("</table>");


推荐阅读