Javascript 按升序排列记录数组

Javascript 按升序排列记录数组,javascript,Javascript,可能重复: 鉴于下面的学生记录数组,您将如何使用Javascript根据年龄按升序对他们进行排序 students = [{ name: "timothy", age: "9"}, { name: "claire", age: "12"}, { name: "michael", age: "20"}] 要按年龄升序排序,请与自定义比较器函数一起使用: students.sort(function (a, b) { return a.age - b.age; }); // stude

可能重复:

鉴于下面的学生记录数组,您将如何使用Javascript根据年龄按升序对他们进行排序

students = [{
name: "timothy",
age: "9"},
{
name: "claire",
age: "12"},
{
name: "michael",
age: "20"}]

要按年龄升序排序,请与自定义比较器函数一起使用:

students.sort(function (a, b)
{
    return a.age - b.age;
});

// students will be 
[{name: "timothy", age: "9"},
 {name: "claire", age: "12"},
 {name: "michael", age: "20"}]
按年龄划分:

students = students.sort(function(a, b) {
  return parseFloat(a.age) - parseFloat(b.age);
});

请仔细阅读此示例:

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);
var标记=新数组(10,12,11,20,2);
对于(var i=0;i

如果您想知道,+a.age数字(a.age)相同

按什么属性升序?为什么ages是字符串而不是数字?首先定义您要排序的术语,因为您可以在示例中按年龄或名称进行排序。通过使用整数实现许多排序算法,年龄很容易。对于名称,您可以转换为和ASCII表示,然后再次按整数值排序e、 查看维基百科上的快速排序。你可以在这里找到一些关于这个主题的有用答案:你不需要
parseFloat
(减法将强制为数字)也不需要赋值(
Array.sort
)。无法在
对象上使用
。那么当
a==b
时该怎么办?@MattBall现在更正了。谢谢。这是一个糟糕的排序实现。我已经尝试过了,但它不起作用。jsfiddle.net/EH8Pm/2/@jason:在jfiddle示例中,您只交换了年龄,而不是整个数组元素。此外,您还输出了
标记
ad not
students
@jason:事实上,甚至不是这样:你正在访问
students.age[i]
而不是
students[i].age
。看看是否有一个有效的版本(尽管正如Matt所说,这不是一个好的算法)。您可以在这里找到一些关于这个主题的有用答案:函数在执行减法之前是否应该执行parseInt?我可以想象,如果根据字符串表示法执行,它可能会返回愚蠢的结果。@Joel
parseInt(年龄,10岁)
当然可以,但不是绝对必要的。减法强制将操作数转换为数字。如果其中一个值不能转换为数字,则返回NaN。@Ivan true,但问题中没有任何东西表明年龄可能是非数字字符串。如果两个人年龄相同,会发生什么?他们在同一时间聚在一起基于它们在数组中的前一个位置的位置(有点随机)。如果要在年龄相等时按字母顺序对它们排序,可以在以下位置编写此命令:
If(+a.age==+b.age)返回[a.name,b.name]。sort()[0]==a.name?-1:1;
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);
students.sort(function(a,b){
      if (+a.age > +b.age) return 1;
      return -1;
});
// Now the object is ordered by age (min to max)