2016-06-08 56 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());