JavaScript сравнивает прототип объекта и суммирует их - PullRequest
0 голосов
/ 08 ноября 2018

Мне нужна помощь, я застрял в 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>");
  }
}

С уважением,

1 Ответ

0 голосов
/ 08 ноября 2018

Создайте объект, ключи которого - названия месяцев, а значения - итоги дождя. Обведите массив и добавьте количество дождей к соответствующему итогу.

Кроме того, вы должны создать только одну таблицу; цикл должен создавать только строки.

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>");
...