JavaScript:按数字排序数组字符串然后字母

时间:2016-06-08 19:34:17

标签: javascript arrays sorting ember.js

我希望对包含电影标题字符串的数组进行排序,例如:

['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();
    });
}

这几乎有效,但在对数字和字符标题进行排序时确实存在一些冲突。有关如何最好地处理此类请求的任何建议?

3 个答案:

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