JavaScript:按键对项目进行分组,按(!)键对组内的项目进行排序
JavaScript: group items by a key, sort items within(!) the groups by another key - how?
在我的结果中学生应该按房间id分组,然后在组内按年龄排序。
按房间分组/排序的结果:
Name | R | Age
-------------------
Student 2 | 1 | 22
Student 4 | 1 | 25
Student 3 | 3 | 21
Student 6 | 3 | 27
Student 1 | 5 | 29 <- Wrong, should be: Student 5, Room 5, Age 23
Student 5 | 5 | 23 <- Wrong, should be: Student 1, Room 5, Age 29
我的当前代码 (JSFiddle: http://jsfiddle.net/n9KNx/):
<script type="text/javascript">
/* add students */
var students = new Array();
students.push({ name: "Student 1", room_id: 5, age: 29 });
students.push({ name: "Student 2", room_id: 1, age: 22 });
students.push({ name: "Student 3", room_id: 3, age: 21 });
students.push({ name: "Student 4", room_id: 1, age: 25 });
students.push({ name: "Student 5", room_id: 5, age: 23 });
students.push({ name: "Student 6", room_id: 3, age: 27 });
/* sort by room_id */
students.sort(function(a, b) {
return ((a.room_id < b.room_id) ? -1 : ((a.room_id > b.room_id) ? 1 : 0));
});
/* FIXME: sort by age without changing the room order */
/* ... code ... */
/* build HTML output */
var html = '<table>';
html += '<tr><th>Name</th><th>Room</th><th>Age</th></tr>';
for (var i = 0; i < students.length; i++) {
html += '<tr><td>'+ students[i].name +'</td><td>'+ students[i].room_id +'</td> <td>'+ students[i].age +'</td></tr>';
}
html += '</table>';
$("#students").html(html);
</script>
<div id="students">...</div>
你如何在每组中按年龄对学生进行排序?我在JSFiddle上添加了代码,请随意使用!
需要扩展排序函数以涵盖房间相等的情况。当房间相等时,我们再比较年龄。
students.sort(function(a, b) {
if(a.room_id < b.room_id){
return -1;
}else if(a.room_id > b.room_id){
return 1;
}else{
if(a.age < b.age){
return -1
}else if(a.age > b.age){
return 1;
}else{
return 0;
}
}
});
工作示例 http://jsfiddle.net/n9KNx/1/
由于对数字进行排序,因此不需要进行三向比较,只需计算差值即可。解决方案看起来像这样:
students.sort(function(a, b) {
return (a.room_id - b.room_id) || (a.age - b.age);
});
…并做与其他答案中的长片段完全相同的事情:-)
students.sort(function(a, b) {
return ((a.room_id < b.room_id) ? -1 :
((a.room_id > b.room_id) ? 1 :
((a.age < b.age) ? -1 :
((a.age > b.age) ? 1 : 0))));
});
相关文章:
- 如何在智能表中按日期对项目进行排序
- 按不同项目对对象数组进行排序
- 在Javascript中,当使用array.prush方法向列表中添加项目时,如何对其进行排序
- 我在页面中使用的jQuery UI可排序项目;不起作用
- 如何在角度js的自动完成下拉列表中对项目列表(按字母顺序)进行排序
- Jquery UI可排序,自动移动项目
- 对选定的排序项目应用不同的颜色
- 获取项目的顺序 jQuery 可排序并设置它们的顺序
- 在可排序的JQuery UI列表中至少保留一个项目
- 可拖动和可排序项目编号在更改时更新
- 限制可放置jqueryui可排序项目的区域
- 如何对select2自动完成结果进行排序,只显示以第一个字母开头的项目
- 动态生成<选择>未显示已排序列表中的第一个项目
- List.js对很长的项目排序不正确
- 更新“项目”选项以进行排序
- 使用 jqueryui 的多个可排序列表 - 不希望项目在列表组之间混合
- 如何在可排序中查找值的项目 用javascript.
- 如何删除项目的可排序 JQuery
- 按字母顺序对项目进行排序
- Jquery UI 可排序和可删除 - 无法将项目从一个列表克隆到另一个列表