javascript - 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>");
}
}
解决方案
创建一个对象,其键是月份名称,值是总降雨量。循环遍历您的阵列并将每个降雨量添加到适当的总数中。
此外,您应该只创建一个表;循环应该只创建行。
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>");
推荐阅读
- java - 是否可以在 kotlin 中为多个伴随对象创建一个全局通用函数
- python - ipyleaflet 热图强度未正确反映
- javascript - 数据不是函数
- git - 如果没有更改,Git 提交将失败构建,但退出代码仍为 0
- java - JTextPane 中的行距不呈现
- javascript - 如何在 ajax 调用中安全地将数据发送到控制器方法,以便通过查看开发人员工具无法利用它
- flutter - 如何在颤动中更改主题数据?
- c# - 如何从外部应用程序在 Dynamics 365 Finance & Operations 中插入/更新客户
- javascript - 如何让承诺等到循环中的所有请求都完成?
- android - 如何使用另一个应用程序打开颤振应用程序