我对JavaScript中的array.sort()方法有疑问。数组中的值集可以从1到更多不等。如果有多个元素,排序功能应按顺序对它们进行排序。这是我的代码:
var myDates = ["03/05/2017","02/01/2017","03/02/2017"];
myDates.sort(function(a,b) {
a = a.split('/').reverse().join('');
b = b.split('/').reverse().join('');
return a > b ? 1 : a < b ? -1 : 0;
});
以上代码工作正常,所有日期都已排序。我的问题是我应该在运行sort方法之前检查数组的长度吗?我问这个是因为我的数组在某些情况下只能有一个元素。到目前为止,当我仅使用一个元素进行测试时,我的代码没有抛出任何错误,但是我想知道在运行sort()
之前是否应该检查数组的长度,或者JavaScript已经处理好了吗?如果有人知道答案,请告诉我。谢谢。
答案 0 :(得分:1)
Array.prototype.sort
规范中记录了此行为。见http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.sort
具体做法是:
对SortCompare调用的参数是先前调用[[Get]]内部方法返回的值,除非根据HasOwnProperty不存在先前调用访问的属性。如果SortCompare的两个透视参数都对应于不存在的属性,请使用+0而不是调用SortCompare。如果只有第一个透视参数不存在,则使用+1。如果只有第二个透视参数不存在,则使用-1。
简而言之:
Array.prototype.sort((undefined, undefined) => { ... }); // => 0
Array.prototype.sort((undefined, b) => { ... }); // => 1
Array.prototype.sort((a, undefined) => { ... }); // => -1