在JavaScript中使用sort方法时,我应该检查数组长度吗?

时间:2017-03-08 02:57:31

标签: javascript arrays sorting

我对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已经处理好了吗?如果有人知道答案,请告诉我。谢谢。

1 个答案:

答案 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