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 notstudents
@jason:事实上,甚至不是这样:你正在访问students.age[i]
而不是students[i].age
。看看是否有一个有效的版本(尽管正如Matt所说,这不是一个好的算法)。您可以在这里找到一些关于这个主题的有用答案:函数在执行减法之前是否应该执行parseInt?我可以想象,如果根据字符串表示法执行,它可能会返回愚蠢的结果。@JoelparseInt(年龄,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)