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。