Abecedno določanje nizov, predmetov in nizov predmetov - CSS-triki

Anonim

Matrika:

let fruits = (`bananas`, `Apples`, `Oranges`);

To lahko razvrstite po abecedi tako enostavno:

fruits.sort();

Toda opazite nedosledno ohišje v matriki ... vsi veliki črki bodo razvrščeni pred malimi črkami (dovolj čudno), zato bo malo bolj zapleteno:

let fruits = (`bananas`, `Apples`, `Oranges`); fruits.sort((a, b) => ( return a.toLowerCase().localeCompare(b.toLowerCase()); )) console.log(fruits); // ("Apples", "bananas", "Oranges")

Niz predmetov

Stvari postanejo še bolj zapletene, če je tisto, kar poskušate razvrstiti, vgnezdeno v predmete. Z lahkoto bi lahko delali z API-jem JSON.

let fruits = ( ( fruit: `Bananas` ), ( fruit: `apples` ), ( fruit: `Oranges` ) );

Za to bi lahko naredili funkcijo razvrščanja po meri, le majhen korak naprej pa je, da naredimo bolj splošno funkcijo, ki ključ za razvrščanje uporabi kot parameter.

const propComparator = (propName) => (a, b) => a(propName).toLowerCase() == b(propName).toLowerCase() ? 0 : a(propName).toLowerCase() < b(propName).toLowerCase() ? -1 : 1

Zdaj ga lahko uporabimo za razvrščanje:

fruits.sort(propComparator(`fruit`)); console.log(fruits); /* ( (fruit: "apples"), (fruit: "Bananas"), (fruit: "Oranges") ) */

Samo predmet

Če imamo samo predmet ...

let fruits = ( Bananas: true, apples: false, Oranges: true );

Te ključe moramo še vedno pomanjšati, vendar lahko vrsto ključev razvrstimo in nato iz te na novo razvrščene matrike ključev naredimo nov predmet.

let sortedFruits = (); Object.keys(fruits).sort((a, b) => ( return a.toLowerCase().localeCompare(b.toLowerCase()); )).forEach(function(key) ( sortedFruits(key) = fruits(key); )); console.log(sortedFruits); /* ( apples: false, Bananas: true, Oranges: true ) */

Niz predmetov za razvrščanje po ključu

let fruits = ( ( Bananas: true ), ( Apples: false ), ( oranges: true ) );

To je verjetno najtežje med vsemi, a zgoraj bi moralo biti dovolj informacij, da bi se to rešilo. Razumeš.

Koda v živo

Oglejte si nize abecede pisala Chrisa Coyierja (@chriscoyier) na CodePen.