javascript - sort(), sort(function(a,b){return a-b;}); 之间的区别和排序(函数(a,b){...})

标签 javascript arrays sorting

我想了解 sort() 的工作原理以及我应该如何使用它。

我做了一些研究(谷歌)并在 stackoverflow 上解决了类似的问题,但仍有一些事情对我来说不是 100% 清楚。

到目前为止,我的理解如下:

有:

不带参数的 sort():仅对 String 值的简单数组进行字母升序排序

例如

// sort alphabetically and ascending:
var myArr=["Bob", "Bully", "Amy"]
myArr.sort() // Array now becomes ["Amy", "Bob", "Bully"]


sort() with a function as a parameter:根据属性对数组中的对象进行排序;然而,这些项目被比较为数字

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


sort() with a function as a parameter:根据属性对数组中的对象进行排序;项目可以是数字字符串

myArr.sort(function(a, b) {
    if (a.sortnumber < b.sortnumber) return -1;
    else if (a.sortnumber > b.sortnumber) return 1;
    return 0;
});


我尝试使用所有这 3 个 sort() 函数对以下数组进行排序。

var myArr = [{
  "sortnumber": 9,
  "name": "Bob"
},
{
  "sortnumber": 5,
  "name": "Alice"
},
{
  "sortnumber": 4,
  "name": "John"
},
{
  "sortnumber": 3,
  "name": "James"
},
{
  "sortnumber": 7,
  "name": "Peter"
},
{
  "sortnumber": 6,
  "name": "Doug"
},
{
  "sortnumber": 2,
  "name": "Stacey"
}];

//myArr.sort(); // doesn't do anything since it doesn't know on what property to sort

/*
myArr.sort(function(a, b) {
    return (a.sortnumber - b.sortnumber); // sorts array
    return (a.name - b.name); // doesn't sort array
});
*/

/*
// sorts array even when I use name as property to sort on
myArr.sort(function(a, b) {
    if (a.sortnumber < b.sortnumber) return -1;
    else if (a.sortnumber > b.sortnumber) return 1;
    return 0;
});
*/


console.log(myArr);

Here也是一把 fiddle 。

所以,我的问题是:

  1. 我的理解正确吗?
  2. 有什么我遗漏的吗?
  3. 如果第三种情况一直有效,我能一直坚持下去吗? 其他两种情况在某种程度上更有效或对 第三种情况?

如果有人能详细说明以上内容,我将不胜感激。谢谢。

最佳答案

好的,经过一些额外的研究,通过 MDN documentation , 和 arraysortarraysort2链接,我发现这些链接非常有用,我创建了一张可能对其他人有用的幻灯片,所以我将其张贴在这里。谢谢大家的回答!

enter image description here

关于javascript - sort(), sort(function(a,b){return a-b;}); 之间的区别和排序(函数(a,b){...}),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39202616/

相关文章:

javascript - 如何过滤90分以上的分数?

c++在没有try Catch block 的情况下捕获错误输入

javascript - 使用 Array.includes 使用一个键检查数组是否包含对象

javascript - 将 json 对象排序到嵌套树中

mysql - 在MYSQL中通过一个varchar列快速排序10亿行

javascript - JS 无法通过 AJAX 调用正确执行

javascript - 如何使用正则表达式删除带有数字和特殊字符的字符串

java - 为什么此方法不能正确地对较大数字的数组进行排序?

使用 activerecord 模型验证器的 Javascript 验证

javascript - 短路代替三元运算符