Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript sort()方法的更简单方法_Javascript_Sorting - Fatal编程技术网

JavaScript sort()方法的更简单方法

JavaScript sort()方法的更简单方法,javascript,sorting,Javascript,Sorting,我有一个对象阵列,模拟一些视频游戏: let games = [ {title: 'Desperados 3', score: 74, genre: ['Tactics', 'Real Time']}, {title: 'Streets of Rage', score: 71, genre: ['Fighting', 'Side Scroller']}, {title: 'Gears Tactics', score: 71, genre: ['Tactics', 'Rea

我有一个对象阵列,模拟一些视频游戏:

let games = [
    {title: 'Desperados 3', score: 74, genre: ['Tactics', 'Real Time']},
    {title: 'Streets of Rage', score: 71, genre: ['Fighting', 'Side Scroller']},
    {title: 'Gears Tactics', score: 71, genre: ['Tactics', 'Real Time']},
    {title: 'XCOM: Chimera Squad', score: 59, genre: ['Tactics', 'Turn Based']},
    {title: 'Iratus Lord of The Dead', score: 67, genre: ['Tactics', 'Side Scroller']},
    {title: 'DooM Eternal', score: 63, genre: ['Shooter', 'First Person']},
    {title: 'Ghost Of Tsushima', score: 83, genre: ['Action', '3rd Person']},
    {title: 'The Last Of Us Part 2', score: 52, genre: ['Shooter', '3rd Person']}
]
如果我想根据比赛分数对其进行排序,这非常简单:

const gamesSortedByRating = games.sort((a, b) => b.score - a.score);
但我发现,为了按游戏名称进行排序,它不能(或者至少我不能)这样做:

const gamesSortedByTitle = games.sort((a, b) => a.title - b.title);
为此,我必须编写一个比较函数:

function compare(a, b) {
    const titleA = a.title.toLowerCase();
    const titleB = b.title.toLowerCase();
  
    let comparison = 0;

    if (titleA > titleB) {
      comparison = 1;
    } else if (titleA < titleB) {
      comparison = -1;
    }

    return comparison;
}
功能比较(a、b){
const titleA=a.title.toLowerCase();
const titleB=b.title.toLowerCase();
让比较=0;
如果(标题A>标题B){
比较=1;
}否则如果(标题a<标题b){
比较=-1;
}
收益比较;
}

问题是有没有更简单的方法?就像我上面展示的分数线一样。

实际上有一个函数:

const gamesSortedByTitle=games.sort((a,b)=>a.title.localeCompare(b.title));
另外,正如您所知,
sort
实际上修改了数组,因此您可能希望在排序之前对数组进行深度克隆。

games.sort((a,b)=>a.title.localeCompare(b.title))

您可以在此处查看此函数的文档:

返回a.title.localeCompare(b.title)
,除非您明确需要使用downcase,在这种情况下,同样的事情就是downcase。@CBroe oth,
“0xAA”-“0xAB”
“10”-“5”
。这可能没有意义,但是JavaScript。