2016-06-08 55 views
2

我期待排序包含電影標題字符串,例如數組:JavaScript的:按編號排序數組字符串,則信

['Battleship','101 Dalmatians','Alice, Sweet Alice','40 Days of Night', '303 Fear Faith Revenge'...] 

從此我的預期輸出是:

101 Dalmatians 
303 Fear Faith Revenge 
40 Days of Night 
Alice, Sweet, Alice 
Battleship 

我嘗試以下接近:

getMoviesInAlpOrder() { 
    const movieList = this.getMovies(); 
    return movieList.sort(function(a, b) { 
     return a.title.toLowerCase() > b.title.toLowerCase(); 
    }); 
} 

這幾乎工作,但排序時確實有一些衝突t他數字與角色標題。有關如何最好地處理此類請求的任何建議?

+0

您的預期產出是多少?另外,它應該如何排序'['200','3']'? – 4castle

+0

期望的輸出應該與當前在數組中顯示的一樣。但是,今後,我不能總是假定我的參賽作品將按照正確的順序排列。諸如「200夜」之類的標題應該出現在「40日之夜」之前的「303恐懼信仰復仇」之前,等等。 – Yuschick

+0

更新了我的問題,以便更清楚地瞭解我的預期結果。 – Yuschick

回答

4

雖然其他的答案是正確的,我認爲以下解決方案將是一個更靈活一點。

使用localeCompare應該可以解決您的問題(如果您使用重音字符獲得文本,可能會出現問題!)。尤其是電影片名,我希望有一些外國字符可以分類。

getMoviesInAlpOrder() { 
    const movieList = this.getMovies(); 
    return movieList.sort(function(a, b) { 
     var lowerCaseA = a.title.toLocaleLowerCase(); 
     var lowerCaseB = b.title.toLocaleLowerCase(); 
     return lowerCaseA.localeCompare(lowerCaseB); 
    }); 
} 
+0

看起來工作。我將不得不閱讀有關localeCompare的內容,以瞭解這正在做什麼。謝謝! – Yuschick

4

您可以使用Array.prototype.sort()

var arr = ['Battleship','101 Dalmatians','Alice, Sweet Alice','40 Days of Night', '303 Fear Faith Revenge']; 
 
console.log(arr.sort());