关于javascript:按升序排序记录数组

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"}]


要按年龄升序排序,请使用带有自定义比较器函数的Array.sort

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);
});