Абецедно постављање низова, објеката и низова објеката - ЦСС-трикови

Anonim

Низ:

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

То можете разврстати по абецеди тако лако као:

fruits.sort();

Али запазите недоследно слово у низу ... велики слови ће бити сортирани пре малих слова (довољно чудно), па ће бити мало компликованије:

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

Низ предмета

Ствари постају још замршеније ако је оно што покушавате да сортирате угнежђено унутар објеката. Лако може бити случај рада са ЈСОН АПИ-јем.

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

За то бисмо могли направити прилагођену функцију сортирања, али један мали корак даље је направити општију функцију која узима кључ за сортирање као параметар.

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

Тако да сада можемо да га користимо за сортирање:

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

Само објекат

Ако само имамо предмет ...

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

Те кључеве још увек морамо смањити, али можемо сортирати низ кључева и затим од тог ново сортираног низа кључева направити нови објекат.

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 ) */

Низ објеката за сортирање по кључу

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

Ово је вероватно најлукавији од свих, али горе би требало бити довољно информација да бисте то решили. Схвати.

Ливе Цоде

Погледајте низове абецеде оловке Цхриса Цоииера (@цхрисцоииер) на ЦодеПен-у.