在JavaScript 中按字母排序之如何在 JS 中按名稱排序
有時(shí)你可能有一個單詞數(shù)組,你想按字母順序(從 a-z)對每個單詞進(jìn)行排序。或者你可能有一個包含用戶信息(包括名字)的對象數(shù)組,例如,你想按照用戶的名字來排序。
我們可以在 JavaScript 中通過直接使用 sort()
方法或使用比較函數(shù)來實(shí)現(xiàn)這個目的。
如果你很著急的話,這里有兩種方法:
// 對一個名字?jǐn)?shù)組進(jìn)行排序 names.sort(); // 通過 name 對一個對象數(shù)組進(jìn)行排序 users.sort(function (a, b) { if (a.name < b.name) { return -1; } if (a.name > b.name) { return 1; } return 0; });
現(xiàn)在讓我們來了解一下我們是如何得出這兩種解決方案的。
如何按字母順序?qū)σ粋€名字?jǐn)?shù)組進(jìn)行排序
假設(shè)我們有一個名字的數(shù)組:
let names = ["John Doe", "Alex Doe", "Peter Doe", "Elon Doe"];
我們可以使用 sort()
方法按字母順序?qū)@些名字進(jìn)行排序:
let sortedNames = names.sort(); console.log(sortedNames);
這將返回一個按字母排序的名字?jǐn)?shù)組:
["Alex Doe","Elon Doe","John Doe","Peter Doe"]
注意:當(dāng)一些名字首字母大寫,而其他名字首字母小寫時(shí),那么輸出將是不正確的,因?yàn)?nbsp;sort()
方法將大寫字母放在小寫字母之前:
let names = ["John Doe", "alex Doe", "peter Doe", "Elon Doe"]; let sortedNames = names.sort(); console.log(sortedNames); // ["Elon Doe","John Doe","alex Doe","peter Doe"]
所以你需要確保這些詞的大小寫都是一樣的,否則它就不能按照我們的需求按字母順序返回名字。
如何在 JavaScript 中按姓名的字母順序排列
在現(xiàn)實(shí)場景中,我們可能有一個用戶數(shù)組,每個用戶的信息都在一個對象中。這些信息可以是任何與用戶的名字有關(guān)的信息,比如說:
let users = [ { name: "John Doe", age: 17 }, { name: "Elon Doe", age: 27 }, { name: "Alex Doe", age: 14 } ];
看一下上面的對象,之前我們直接在數(shù)組上應(yīng)用 sort()
方法的方式將不會起作用。相反,它將拋出相同的數(shù)組,但項(xiàng)目不會按照我們想要的順序排列。
我們將在使用 sort()
方法的同時(shí)使用比較函數(shù)來按名字對這個用戶數(shù)組進(jìn)行排序。
我們將使用比較函數(shù)來定義一個替代的排序順序。根據(jù)參數(shù)的不同,它返回一個負(fù)值、零值或正值:
語法:
function(a, b){return a - b}
當(dāng)我們把這個比較函數(shù)傳入 sort()
方法時(shí),它根據(jù)我們設(shè)定的條件對每個值進(jìn)行比較,然后根據(jù)返回的值對每個名字進(jìn)行排序(負(fù)數(shù)、零、正數(shù))。
- 如果結(jié)果是負(fù)的,
a
被排序在b
之前。 - 如果結(jié)果是正數(shù),則
b
被排序在a
之前。 - 如果結(jié)果是
0
,兩個值的排序順序不做任何改變。
使用上面的例子,我們現(xiàn)在可以這樣將比較函數(shù)和 sort()
方法一起使用:
users.sort(function (a, b) { if (a.name < b.name) { return -1; } if (a.name > b.name) { return 1; } return 0; }); console.log(users);
上面的代碼對每個名字進(jìn)行比較。如果是大于,它返回 1。如果是小于,則返回 -1。返回的值用于按字母順序排列我們的數(shù)組的值:
[ { name: "Alex Doe", age: 14 }, { name: "Elon Doe", age: 27 }, { name: "John Doe", age: 17 } ]
注意:就像我們之前看到的,這總是根據(jù)字母的大小寫運(yùn)行,并將大寫字母排在小寫字母之前。
let users = [ { name: "alex Doe", age: 14 }, { name: "Elon Doe", age: 27 }, { name: "John Doe", age: 17 } ]; users.sort(function (a, b) { if (a.name < b.name) { return -1; } if (a.name > b.name) { return 1; } return 0; }); console.log(users);
輸出:
?[
{
name: "Elon Doe",
age: 27
},
{
name: "John Doe",
age: 17
},
{
name: "alex Doe",
age: 14
}
]
總結(jié)
在這篇文章中,你已經(jīng)學(xué)會了如何在兩種可能的情況下使用 sort()
方法按字母順序排列數(shù)組。
在名字有不同字母大小寫的情況下,最好在使用 sort()
方法之前先將它們轉(zhuǎn)換為特定的字母大小寫。
到此這篇關(guān)于在JavaScript 中按字母排序之如何在 JS 中按名稱排序的文章就介紹到這了,更多相關(guān)js按名稱排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript Event學(xué)習(xí)第七章 事件屬性
為了理解Event屬性,我將在這里給出一些示例代碼。在這個范疇內(nèi)有非常嚴(yán)重的瀏覽器兼容性問題。2010-02-02js實(shí)現(xiàn)前端界面導(dǎo)航欄下拉列表
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)前端界面導(dǎo)航欄下拉列表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08