【发布时间】:2021-04-07 19:39:14
【问题描述】:
我在对 EJS 中的对象数组进行排序时遇到了麻烦(从服务器发送到 Node.js)。对象数组由多个课程及其详细信息组成。下面是joinLecture.js 文件,其中对象数组被发送到 EJS。 res.render("lectureSearch", {searchData: mappedResults});。这完全可以正常工作,并且可以在 EJS 中显示(没有排序功能)。下面是在对对象数组进行排序时给我带来麻烦的 EJS。
<h2>Current Lectures</h2>
<table id="lecturesTable">
<thead>
<tr>
<th>School</th>
<th>Location</th>
<th>Class</th>
<th>Subject</th>
<th>Teacher</th>
<th>Date</th>
<th>Start Time</th>
<th>End Time</th>
<th>Additional Notes</th>
</tr>
<thead>
<tbody id="lecturesTableData">
<% if(data.length){ %>
<% function loadTableData(data){ %>
<% for(let i = 0; i < data.length; i++) { %>
<tr>
<td><%=data[i].school%></td>
<td><%=data[i].location%></td>
<td><%=data[i].class%></td>
<td><%=data[i].subject%></td>
<td><%=data[i].teacher_name%></td>
<td><%=data[i].date%></td>
<td><%=data[i].start_time%></td>
<td><%=data[i].end_time%></td>
<td><%=data[i].additional_notes%></td>
</tr>
<% } %>
<% } %>
<% }else{ %>
<tr>
<td>No Lessons</td>
</tr>
<% } %>
</tbody>
</table>
<button onclick="sortSchoolAscending()">School Ascending</button>
<button onclick="sortSchoolDescending()">School Descending</button>
<button onclick="sortLocationAscending()">Location Ascending</button>
<button onclick="sortLocationDescending()">Location Descending</button>
</body>
<script>
function sortSchoolAscending(){
data.sort(function(a, b) {
return parseFloat(b.school) - parseFloat(a.school);
});
loadTableData(data);
}
function sortSchoolDescending(){
data.sort(function(a, b) {
return parseFloat(a.school) - parseFloat(b.school);
});
loadTableData(data);
}
function sortLocationAscending(){
data.sort(function(a, b) {
return parseFloat(b.school) - parseFloat(a.school);
});
loadTableData(data);
}
function sortLocationDescending(){
data.sort(function(a, b) {
return parseFloat(a.school) - parseFloat(b.school);
});
loadTableData(data);
}
</script>
课程表在没有loadTableData EJS 函数的情况下运行良好,但没有排序。以下是我收到的错误。
Uncaught ReferenceError: 数据未定义 在 sortSchoolAscending 在 HTMLButtonElement.onclick。
我已经尝试解决这个问题很长一段时间了,因此我们将非常感谢您的帮助。谢谢。
【问题讨论】:
-
您没有在任何地方、全局或函数内部定义数据。
-
感谢您的回复,EJS中没有'loadTableData'函数,数据显示在表格中,通过if语句和for循环接收到data.length。我需要做些什么才能让函数也接收数据以便排序工作?
-
将“数据”作为参数传递给函数。
-
我只是将数据用作参数和接收器错误:未捕获的 ReferenceError: data is not defined at sortSchoolAscending at HTMLButtonElement.onclick
-
上面的第一条评论是相关的。请显示您在哪里定义了
data。我知道你说它在没有该功能的情况下也可以工作,但请理解这个问题仍然是相关的:data定义在哪里?
标签: javascript html arrays object ejs