JavaScript Academy · Oppitunti

Locale-tietoinen lajittelu

Lajitelkaa merkkijonot oikein Intl.Collatorilla.

Oppitunti 4/413 vaihetta

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 wins

localeCompare

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")); // 1

Lajittelu 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 ordering

Intl.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")); // true

Olioiden 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.

Aloita maksutta

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

  1. Lukujen ja valuuttojen muotoilu
  2. Päivämäärien ja kellonaikojen muotoilu
  3. Suhteellinen aika ja monikot
  4. Locale-tietoinen lajittelu
← Takaisin: JavaScript Academy