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

Set*_*ily 6 javascript arrays sorting

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

我做了一些研究(谷歌),并在stackoverflow上经历了类似的问题,但仍然有一些事情不是100%清楚我.

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

有:

sort()不带参数:按字母顺序升序排序字符串值的简单数组

例如

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


使用函数作为参数的sort():根据数组属性对数组中的对象进行排序; 但是,这些项目将作为数字进行比较

myArr.sort(function(a,b) { 
    return a - b; 
});
Run Code Online (Sandbox Code Playgroud)


使用函数作为参数的sort():根据数组属性对数组中的对象进行排序; 项目可以是数字字符串

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


我尝试使用所有这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);
Run Code Online (Sandbox Code Playgroud)

也是一个小提琴.

所以,我的问题是:

  1. 我的理解是否正确?
  2. 有什么我想念的吗?
  3. 如果第三种情况始终有效,我是否可以始终坚持下去,或者其他两种情况在某种程度上更有效还是对第三种情况有任何好处?

如果有人能详细说明上述情况,我将非常感激.谢谢.

Set*_*ily 5

好的,经过一些额外的研究,通过MDN文档,以及我发现非常有帮助的arraysortarraysort2链接,我创建了一个可能对其他人有用的幻灯片,所以我在这里发布它.谢谢大家的答案!

在此输入图像描述