2017-03-08 31 views
0

我有一個關於JavaScript中array.sort()方法的問題。數組中的值可以從1變化到更多。如果有多個元素,Sort函數應按順序對它們進行排序。這裏是我的代碼:在JavaScript中使用排序方法時應該檢查數組長度嗎?

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

好...看看會發生什麼你自己,對於0和1元 - 暗示,放的console.log在回調內 –

+0

這將如何幫助我獲得答案?我知道我的函數會產生什麼,如果我有多個元素,但我想知道如果我有少於兩個元素,我應該阻止我的函數運行。 –

+0

罰款...如果有少於2個元素,排序回調甚至沒有被調用 - 所以,沒有必要檢查長度。老實說,我只是想你可能想學習如何學習 –

回答

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

+0

不,它是相關的。如果SortCompare的兩個透視參數都與不存在的屬性相對應,請使用+0 **而不是調用** SortCompare ... – fubar

+0

對不起,我明白你的意思了 - 你的代碼使用了'undefined',這會讓我困惑 - 將刪除我的「批評」:p –