Javascript JS中的数组排序

Javascript JS中的数组排序,javascript,Javascript,这是怎么回事 var values = [10, 2, 1]; console.log(values.sort()); 输出: [1,10,2] JavaScript的数组排序函数正在进行排序。它基于每个元素的字符串值进行排序。在这种情况下,1在10之前,因为尽管它们具有相同的前缀,但1较短。它们都在2之前,因为1在2之前,也就是说,它甚至不看10的第二个字符 您还可以编写自己的比较器函数,以使用您想要的任何标准进行排序。要按数字排序,请尝试以下操作: var values = [10, 2,

这是怎么回事

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

[1,10,2]

JavaScript的数组排序函数正在进行排序。它基于每个元素的字符串值进行排序。在这种情况下,1在10之前,因为尽管它们具有相同的前缀,但1较短。它们都在2之前,因为1在2之前,也就是说,它甚至不看10的第二个字符

您还可以编写自己的比较器函数,以使用您想要的任何标准进行排序。要按数字排序,请尝试以下操作:

var values = [10, 2, 1];
console.log(values.sort(function(a,b) {return a-b}));
values.sort(function(a,b){return b-a});
有关数组排序的详细信息,请参阅

有趣的是,一个更复杂的示例,使用不同的方法对复杂对象进行排序:

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

默认排序顺序为字母和升序。当数字按字母顺序排序时,40在5之前。要执行数字排序,在调用排序方法时必须将函数作为参数传递。您需要一个定义排序顺序的函数。您的案例有四种用途:

values.sort(function(a,b){return a-b})

Javascript排序按字母顺序工作。因此,您必须提供自己的排序功能。函数应返回+表示较大值,0表示相等值,以及-表示较小值。因此,对于升序,请尝试以下方法:

var values = [10, 2, 1];
console.log(values.sort(function(a,b) {return a-b}));
values.sort(function(a,b){return b-a});

说明:@Rikonator这个问题是关于多维数组的。如果你想对数组进行数字排序,请看看这个问题的公认答案:问题是这里发生了什么?。那么发生了什么?你的答案是什么?你应该给出你的答案并添加这些信息。