我希望对包含电影标题字符串的数组进行排序,例如:
['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();
});
}
这几乎有效,但在对数字和字符标题进行排序时确实存在一些冲突。有关如何最好地处理此类请求的任何建议?
答案 0 :(得分:4)
您可以使用Array.prototype.sort():
var arr = ['Battleship','101 Dalmatians','Alice, Sweet Alice','40 Days of Night', '303 Fear Faith Revenge'];
console.log(arr.sort());
答案 1 :(得分: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);
});
}
答案 2 :(得分:1)
只需使用movieList.sort()
即可。如果您不提供比较函数,它会将元素转换为字符串,并根据每个字符的unicode值进行比较。因此,“10”将出现在“2”之前,而“303”将出现在“40”之前。
来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort