获取数组中位数遇阻,嵌套数组计算均值并保留名称求助
解决温度数据均值计算与表格展示问题
嘿,别发愁啦!我帮你梳理下代码里的问题,然后给出修复方案,保证能正确计算每个城市的温度均值(medel),还不会弄丢城市名~
你的代码里的几个核心问题
- 误删城市名:你用了
newArray[i].shift(),这个方法会直接删除数组的第一个元素(也就是城市名),这肯定不是你想要的。 - 计算总和而非均值:当前代码只算了温度的总和,没有除以数据个数(3组)得到均值。
- 数组操作混乱:同时操作
tempen和newArray两个数组,容易导致数据不同步,增加调试难度。
修复后的完整代码
var tempen = [ ["", "00-08", "08-16", "16-24"], ["Malmö", 12, 16, 9], ["Mariestad", 13, 15, 10], ["Stockholm", 13, 15, 13], ["Upphärad", 14, 16, 15], ["Göteborg", 13, 14, 12] ]; // 给表头添加"medel"列 tempen[0].push("medel"); // 遍历每个城市的数据行(从索引1开始,跳过表头) for (var i = 1; i < tempen.length; i++) { // 提取当前行的温度数据(跳过索引0的城市名) var temperatureValues = tempen[i].slice(1); // 计算温度总和,reduce添加初始值0避免异常 var total = temperatureValues.reduce(function(prev, curr) { return prev + curr; }, 0); // 计算均值,保留1位小数和示例格式一致 var average = (total / 3).toFixed(1); // 将均值添加到当前行的末尾 tempen[i].push(parseFloat(average)); } function printit() { var tableHTML = "<table border='1'>"; // 添加边框让表格更清晰 for (var i = 0; i < tempen.length; i++) { tableHTML += "<tr>"; tempen[i].forEach(function(cell) { tableHTML += "<td>" + cell + "</td>"; }); tableHTML += "</tr>"; } tableHTML += "</table>"; // 别忘了关闭表格标签 document.getElementById("kontainer").innerHTML = tableHTML; } // 调用函数生成表格 printit();
关键修改说明
- 保留城市名:用
slice(1)提取温度数据,不会修改原数组的城市名,完美保留每个城市的标识。 - 正确计算均值:总和除以3(每组3个温度数据),并用
toFixed(1)控制小数位数,和你给出的示例结果完全匹配。 - 简化数组操作:直接在原
tempen数组上修改,避免多数组操作的混乱。 - 优化表格生成:用
forEach简化单元格遍历,同时添加表格边框,让展示效果更直观。
额外补充:如果需要计算中位数
如果你说的“中位数”是笔误,但确实需要计算中位数的话,只需要把均值计算的部分换成下面的代码:
// 计算中位数:排序后取中间值(3个数的话就是索引1的元素) var sortedTemps = temperatureValues.sort(function(a, b) { return a - b; }); var median = sortedTemps[1]; tempen[i].push(median);
内容的提问来源于stack exchange,提问作者Sebastian Andersson
相关产品推荐
相关产品推荐

