Sorting array of records in ascending order
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
How to sort an array of objects?
号
考虑到下面的学生记录数组,您将如何根据年龄使用javascript按升序对他们排序?
1 2 3 4 5 6 7 8 9 | students = [{ name:"timothy", age:"9"}, { name:"claire", age:"12"}, { name:"michael", age:"20"}] |
要按年龄升序排序,请使用带有自定义比较器函数的
1 2 3 4 5 6 7 8 9 10 11 12 | students.sort(function (a, b) { return a.age - b.age; }); // students will be [{name:"timothy", age:"9 <div class="suo-content">[collapse title=""]<ul><li>函数在执行减法之前应该执行parseint吗?我可以想象,如果它是基于字符串表示来完成的,它可能会返回愚蠢的结果。</li><li>@乔尔·埃多克斯(Joel EDOCX1)(0)当然可以,但并非绝对必要。减法将操作数强制为数字。</li><li>如果其中一个值不能转换为数字,则返回NaN。</li><li>@伊凡是真的,但问题是没有什么可以表明年龄可能是非数字字符串。</li></ul>[/collapse]</div><hr>[cc lang="javascript"]students.sort(function(a,b){ if (+a.age > +b.age) return 1; return -1; }); // Now the object is ordered by age (min to max) |
。
如果你想知道,+a.age和数字(a.age)是一样的。
请阅读此示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var marks = new Array(10,12,11,20,2); for(var i=0;i<marks .length;i++) //Hold the first element { for(var j=i+1;j<marks.length;j++) //Hold the next element from the first element { if(Number(marks[i]) > Number(marks[j])) //comparing first and next element { tempValue = marks[j]; marks[j] = marks[i]; marks[i] = tempValue; } } } document.write(marks); |
1 2 3 4 5 6 7 | student.sort(function(a,b){ if (a.name > b.name) return -1; return 1; }); |
号
By age:
1 2 3 | students = students.sort(function(a, b) { return parseFloat(a.age) - parseFloat(b.age); }); |