这里发生了什么?
var values = [10, 2, 1];
console.log(values.sort());
输出:
[1,10,2]
答案 0 :(得分:7)
JavaScript的数组sort()
函数正在进行Lexicographic排序。它基于每个元素的“字符串”值进行排序。在这种情况下,1
在10
之前,因为虽然它们具有相同的前缀,但1
更短。它们都在2
之前,因为1
在2
之前(即它甚至从未查看10
的第二个字符。)
您还可以编写自己的“比较器”功能,以使用您想要的任何标准进行排序。要进行数字排序,请尝试以下方法:
var values = [10, 2, 1];
console.log(values.sort(function(a,b) {return a-b}));
有关数组排序的更多详细信息,请参阅here。
只是为了好玩,一个更复杂的例子,使用不同的方法对复杂对象进行排序:
var people = [
{
name: "Bob",
age: 42
},
{
name: "Alan",
age: 50
},
{
name: "Charlie",
age: "18"
}
];
console.log(JSON.stringify(people)); // Before sorting
people.sort(function(a,b) { // Sort by name
if (a.name < b.name) return -1;
else if (a.name > b.name) return 1;
else return 0;
});
console.log(JSON.stringify(people));
people.sort(function(a,b) { // Sort by age
return a.age - b.age;
});
console.log(JSON.stringify(people));
答案 1 :(得分:3)
默认排序顺序是字母顺序和升序。当数字按字母顺序排序时,&#34; 40&#34;来自&#34; 5&#34;。要执行数字排序,您必须在调用sort方法时将函数作为参数传递,您需要一个定义排序顺序的函数。你的四个案例使用:
values.sort(function(a,b){return a-b})
答案 2 :(得分:0)
Javascript排序按字母顺序排列。所以你必须提供自己的排序功能。该函数应返回+表示更大值,0表示相等,而 - 表示较小值。因此,对于升序,试试这个:
values.sort(function(a,b){return b-a});