Locale-tietoinen lajittelu
Lajitelkaa merkkijonot oikein Intl.Collatorilla.
Locale-tietoinen lajittelu on ilmainen JavaScript Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu JavaScript Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. JavaScript Academy-kurssilla on yhteensä 4 oppituntia.
Miksi oletuslajittelu epäonnistuu
Taulukon sort() vertailee merkkijonoja UTF-16-koodiyksiköiden perusteella. Siksi isot kirjaimet sijoittuvat ennen pieniä kirjaimia ja aksentteja käsitellään väärin — tämä ei sovi ihmisille tarkoitettuihin luetteloihin.
const words = ["banana", "Apple", "cherry"];
console.log([...words].sort()); // ["Apple","banana","cherry"] — capital winslocaleCompare
String.prototype.localeCompare vertailee kahta merkkijonoa kielialueen sääntöjen mukaisesti ja palauttaa negatiivisen, nollan tai positiivisen arvon.
console.log("apple".localeCompare("banana")); // -1
console.log("banana".localeCompare("apple")); // 1Lajittelu localeCompare-menetelmällä
Välittäkää se vertailufunktioksi, jotta saatte ihmisille luontevan järjestyksen.
const words = ["banana", "Apple", "cherry"];
console.log([...words].sort((a, b) => a.localeCompare(b)));
// ["Apple", "banana", "cherry"] — case-insensitive orderingIntl.Collator
Kun lajiteltavia kohteita on paljon, Intl.Collator on nopeampi: luokaa se kerran ja käyttäkää sen compare-menetelmää uudelleen.
const collator = new Intl.Collator("en-US");
const words = ["banana", "Apple", "cherry"];
console.log([...words].sort(collator.compare));Aksentit ja tarkkeet
Vertailijat järjestävät aksentilliset merkit oikein kielialueen mukaan, toisin kuin koodiyksiköihin perustuva vertailu.
const words = ["zebra", "ela", "elf", "elan"];
const collator = new Intl.Collator("fr");
console.log([...words].sort(collator.compare));Herkkyys
sensitivity määrittää, millä eroilla on merkitystä: "base" ohittaa kirjainkoon ja aksentit, "accent" ohittaa vain kirjainkoon ja "variant" erottaa kaikki.
const c = new Intl.Collator("en", { sensitivity: "base" });
console.log(c.compare("apple", "APPLE")); // 0 (treated equal)Numeerinen lajittelu
numeric: true lajittelee merkkijonojen sisältämät luvut niiden arvon perusteella, joten "file2" tulee ennen merkkijonoa "file10".
const files = ["file10", "file2", "file1"];
const c = new Intl.Collator("en", { numeric: true });
console.log([...files].sort(c.compare)); // ["file1","file2","file10"]Kirjainkoon mukainen järjestys
caseFirst: "upper" tai "lower" määrittää, lajitellaanko isot kirjaimet ennen pieniä kirjaimia, kun muut erot ovat samat.
const c = new Intl.Collator("en", { caseFirst: "upper" });
console.log(["b", "B", "a", "A"].sort(c.compare));Kielialue vaikuttaa järjestykseen
Eri kielet aakkostavat eri tavoin. Ruotsissa tietyt aksentilliset kirjaimet lajitellaan z-kirjaimen jälkeen, ei a-kirjaimen lähelle.
const words = ["z", "a", "o"];
console.log([...words].sort(new Intl.Collator("sv").compare));Haku usage-asetuksella
usage: "search" säätää vertailijan hakua eikä järjestämistä varten — tämä on hyödyllistä suodatettaessa aksentit ohittaen.
const c = new Intl.Collator("en", { usage: "search", sensitivity: "base" });
function matches(a, b) { return c.compare(a, b) === 0; }
console.log(matches("cafe", "CAFE")); // trueOlioiden lajittelu
Käyttäkää vertailijaa avaimen kanssa, kun lajittelette olioista koostuvia taulukoita.
const people = [{ name: "Bob" }, { name: "alice" }, { name: "Carol" }];
const c = new Intl.Collator("en");
console.log(people.sort((a, b) => c.compare(a.name, b.name)).map((p) => p.name));Pikatarkistus
Testatkaa kielialueen mukaista lajittelua.
Kertaus: kielialueen mukainen lajittelu
Näitte, miksi oletusarvoinen sort() on väärä, käytitte localeCompare-menetelmää ja nopeampaa Intl.Collator-ominaisuutta, käsittelitte aksentteja, herkkyyttä, numeerista ja kirjainkoon mukaista järjestystä, kielialuekohtaisia aakkostoja sekä hakuvastaavuutta. Tämä päättää Intl-kurssin.
Opi JavaScript tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 59
- Oppitunnit
- 200
Usein kysytyt kysymykset
Onko oppitunti ”Locale-tietoinen lajittelu” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa JavaScript Academy-oppimispolun 3 oppituntia, myös oppitunnin “Locale-tietoinen lajittelu”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. JavaScript Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Locale-tietoinen lajittelu”?
Lajitelkaa merkkijonot oikein Intl.Collatorilla. Harjoittelet JavaScript Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni JavaScript Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin JavaScript Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Locale-tietoinen lajittelu”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä JavaScript Academy-oppitunnilla?
Kyllä. Jokainen JavaScript Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Lukujen ja valuuttojen muotoilu
- Päivämäärien ja kellonaikojen muotoilu
- Suhteellinen aika ja monikot
- Locale-tietoinen lajittelu