数组在JS中排序

时间:2013-12-26 18:19:28

标签: javascript

这里发生了什么?

var values = [10, 2, 1];
console.log(values.sort());

输出:

  

[1,10,2]

http://jsfiddle.net/A2vRt/

3 个答案:

答案 0 :(得分:7)

JavaScript的数组sort()函数正在进行Lexicographic排序。它基于每个元素的“字符串”值进行排序。在这种情况下,110之前,因为虽然它们具有相同的前缀,但1更短。它们都在2之前,因为12之前(即它甚至从未查看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});