我觉得这真的很有趣。
什么时候-var x = [1, 50, 2, 4, 2, 2, 88, 9, 10, 22, 40];
然后x.sort();
将无法正确排序
当var x = ["dog","apple","zebra","cow"];
,x.sort();
将正确排序。
在一次调用中对它们进行排序的正确功能是什么?
我觉得这真的很有趣。
什么时候-var x = [1, 50, 2, 4, 2, 2, 88, 9, 10, 22, 40];
然后x.sort();
将无法正确排序
当var x = ["dog","apple","zebra","cow"];
,x.sort();
将正确排序。
在一次调用中对它们进行排序的正确功能是什么?
您必须定义自定义排序并将其作为回调传递给 sort()。回调传递了两个参数。
对于数字排序:
x.sort(function(number1, number2) {
return number1 - number2;
});
默认的Array.sort()将每个元素转换为字符串并按字典顺序排序。
根据ECMAScript 15.4.4.11 Array.prototype.sort(comparefn),默认情况下按字母顺序进行排序,这意味着22
在4
. 它实际上在文档中要复杂得多,但这基本上就是它归结为的内容。
如果要对它们进行数字排序,则需要提供自己的比较函数,例如:
x.sort(function(a,b){return a-b;});
该函数只需要返回一个负数 if a < b
,如果它们相等则返回零或一个正数 if a > b
。
你应该只传递你自己的排序方法并按照你喜欢的方式对它们进行排序。您可以将它们视为字符串或数字或其他任何内容,也可以按升序或降序对它们进行排序。此外,您可以传入对象并根据特定成员对这些对象进行排序。sort()
默认情况下,通用方法很少有用。