JS如何在循环生成的表格中计算?

网页从服务器端请求了一串JSON数据,里面是一个字典。通过这个字典在网页上使用循环生成了一个表格。
姓名 语文 数学 英语
张三 89 78 67
李四 78 98 87
王五 66 87 99
但现在需要生成的最终样式是:
姓名 语文 数学 英语 总分 排名
张三 89 78 67 223 2
李四 78 98 87 245 1
王五 66 87 99 216 3
也就是说,需要在表格完成后进行一次计算,加入总分和排名2个字段。
而这个表格的行数也是不确定的,可能是3行,也可能是30行,取决于服务器给出的字符串长度。
不能改服务器端程序,只能改前端,请问应该怎么操作?

按照以下步骤,应该能完成你的需求

1 获取表格数据:通过 JavaScript 获取生成的表格数据,可以使用 document.getElementsByTagName() 或 document.querySelectorAll() 方法获取表格元素。
计算总分:对每个学生的成绩进行加总,可以使用 JavaScript 循环遍历表格中的每一行数据,并将每个学生的语文、数学和英语成绩相加,得出总分。
2 计算排名:根据总分计算每个学生的排名,可以使用 JavaScript 对表格数据进行排序,并将排序结果赋值给表格,然后根据排序结果计算每个学生的排名。
3 更新表格内容:将计算出的总分和排名更新到表格中的对应行中,可以使用 JavaScript 循环遍历表格数据,并将总分和排名插入到对应行的单元格中。

由于不知道设置变量名,这里给一个参考代码吧


// 获取表格数据
const table = document.querySelector('table');
const rows = table.getElementsByTagName('tr');

// 计算总分和排名
let studentScores = [];
for (let i = 1; i < rows.length; i++) {
  const cells = rows[i].getElementsByTagName('td');
  const name = cells[0].innerText;
  const chineseScore = parseInt(cells[1].innerText);
  const mathScore = parseInt(cells[2].innerText);
  const englishScore = parseInt(cells[3].innerText);
  const totalScore = chineseScore + mathScore + englishScore;
  studentScores.push({ name, totalScore });
}

studentScores.sort((a, b) => b.totalScore - a.totalScore);

for (let i = 0; i < studentScores.length; i++) {
  const row = rows[i + 1];
  const cells = row.getElementsByTagName('td');
  cells[4].innerText = studentScores[i].totalScore;
  cells[5].innerText = i + 1;
}

循环能生成表格,也就能取里面的内容,方式差不多,一个是写,一个是读。计算完排个序,再写入。或者拿到json数据先加工得到总分和排名,再创建表格。

建议你 拿到数据后 ,就 对数据 进行 排序和 总分的 计算。 比如 {name:"xx",english:98,chinese:88} 你追加个 排名和总分{name:"xx",english:98,chinese:88,sort:xxx,sum:xxx} .处理完 再渲染

内容来源与ChatGpt4及newbing和百度:


可以在循环生成表格的过程中,对每一行的数据进行计算,并把计算结果添加到表格中。具体可以通过以下步骤实现:

  1. 从服务器端获取JSON数据,将其解析为一个数组或对象。

  2. 在前端页面中创建一个空的表格,定义表头和列数。

  3. 遍历JSON数据,取出每个人的成绩数据,计算总分和平均分。

  4. 创建一个新的表格行,将姓名和计算出的成绩数据添加到表格中。

以下是一个示例代码,假设JSON数据格式如下:

[
  { "name": "张三", "chinese": 89, "math": 78, "english": 67 },
  { "name": "李四", "chinese": 78, "math": 98, "english": 87 },
  { "name": "王五", "chinese": 66, "math": 80, "english": 70 }
]

HTML代码:

<table id="score-table">
  <thead>
    <tr>
      <th>姓名</th>
      <th>语文</th>
      <th>数学</th>
      <th>英语</th>
      <th>总分</th>
      <th>平均分</th>
    </tr>
  </thead>
  <tbody>
  </tbody>
</table>

JavaScript代码:

// 从服务器端获取JSON数据
var jsonData = [
  { "name": "张三", "chinese": 89, "math": 78, "english": 67 },
  { "name": "李四", "chinese": 78, "math": 98, "english": 87 },
  { "name": "王五", "chinese": 66, "math": 80, "english": 70 }
];

// 获取表格和表格的tbody元素
var table = document.getElementById("score-table");
var tbody = table.getElementsByTagName("tbody")[0];

// 遍历JSON数据,计算总分和平均分,并添加到表格中
for (var i = 0; i < jsonData.length; i++) {
  var data = jsonData[i];
  var total = data.chinese + data.math + data.english;
  var average = total / 3;
  
  // 创建一个新的表格行
  var row = tbody.insertRow();
  
  // 添加姓名、语文、数学、英语、总分和平均分数据到表格中
  var nameCell = row.insertCell();
  nameCell.innerHTML = data.name;
  
  var chineseCell = row.insertCell();
  chineseCell.innerHTML = data.chinese;
  
  var mathCell = row.insertCell();
  mathCell.innerHTML = data.math;
  
  var englishCell = row.insertCell();
  englishCell.innerHTML = data.english;
  
  var totalCell = row.insertCell();
  totalCell.innerHTML = total;
  
  var averageCell = row.insertCell();
  averageCell.innerHTML = average.toFixed(2);
}

这样就可以在循环生成的表格中计算每个人的总分和平均分,并将计算结果添加到表格中了。


祝您问题迎刃而解