eEcho blog

is een halte van de gedachte

JavaScript Sorting

OPMERKING: op basis van de feedback die we hebben ontvangen, deze tip is gewijzigd. Het lijkt erop dat we het voorbeeld gaf degradeert na een paar iteraties. Het lijkt verband te houden met het hergebruik van de variabelen “a” en “b” in de aangepaste sorteer-functies. We zijn veranderd de onderstaande code en het voorbeeld op pagina 2 van deze tip gebruik te maken van tijdelijke variabelen “x” en “y” in de aangepaste functies sorteren, in plaats van het hergebruik van “a” en “b”. Dit lijkt om te voorkomen dat eventuele fouten te voorkomen.

Velen van u zijn zich bewust van de “built-in soort functie voor het sorteren van JavaScript-arrays. Maar je misschien nog niet beseffen de ware kracht van deze functie. Deze tip wordt gepraat over de manier waarop dit built-in functie kan worden gebruikt voor het sorteren van multi-dimensionale arrays.

Als u een een-dimensionale JavaScript-array, dan belt de “built-in sort methode op de array zal sorteren dan de array in oplopende volgorde. Maar hoe zit het geval je een array van de eerste namen, een array van achternamen, en met een scala aan leeftijden? U kunt desgewenst het sorteren van de array van de eerste namen, maar houd de overeenkomstige posities in de laatste namen en leeftijden. Dit wordt gedaan door het opzetten van een multi-dimensionale matrix en het sorteren van de eigenlijke “column” van de multi-dimensionale matrix.

Ten eerste, het opzetten van een multi-dimensionale array is lekker makkelijk. Als u weet dat de waarden voor de tijd, kunnen ze worden opgegeven in de javascript-code:

var myData = new Array();
myData[0] = {FirstName:”John”, LastName:”Doe”, Age:40};
myData[1] = {FirstName:”Fred”, LastName:”Smith”, Age:41};

en ga zo maar door.

Als u niet weet wat de waarden van tevoren, dan is het makkelijkste om te doen is het bouwen van een “bouwer”-functie:

var myData = new Array();
function person(firstName, lastName, age) {
this.FirstName = firstName;
this.LastName = lastName;
this.Age = parseInt(parseFloat(age));
}

Then, to add a new entry to the array, it’s just a matter of creating a new person object:

people[people.length++] = new person(form.FirstName.value, form.LastName.value, form.Age.value);

(Het voorbeeld heeft de waarden uit input van de gebruiker op een formulier).

Voor het sorteren van de array, we moeten vertellen hoe JavaScript om te sorteren. Dit komt door een functie die retourneert -1, 0, of +1 als een waarde. -1 Zal de eerste waarde voor de Tweede gesorteerde in de array, +1 zal de tweede waarde voor de eerste, en 0 betekent dat de waarden gelijk zijn. Bijvoorbeeld, als we willen sorteren op de eerste namen, hier is een functie die kan worden gebruikt:

function sortByFirstName(a, b) {
var x = a.FirstName.toLowerCase();
var y = b.FirstName.toLowerCase();
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}

Twee waarden worden doorgegeven aan deze functie. De waarden zijn array objecten. Als de eerste naam deel uit van het eerste object is alfabetisch minder dan de tweede, -1 geretourneerd. Als de eerste naam deel uit van het eerste object is alfabetisch groter dan de tweede, +1 geretourneerd. Anders is de eerste naam waarden moeten gelijk zijn en 0 geretourneerd.

Maar waar komt deze functie komen te spelen? Er is een optionele parameter voor de “built-in sort methode die gebruikt kunnen worden. Als je in een functie naam, de naam van die functie wordt gebruikt om te vergelijken elementen in de matrix voor het sorteren doeleinden. Dus, het gebruik van deze JavaScript-oproep:

people.sort(sortByFirstName);

de array zal worden gesorteerd in oplopende volgorde naar de eerste naam deel uit van elk array-object. Soortgelijke functies en de gesprekken kunnen worden gecreƫerd om te sorteren op de achternaam of de leeftijd.

Merk op dat JavaScript in oplopende volgorde gesorteerd bij verstek gewezen. Maar onze functie geeft hoe de zaken moeten worden besteld. Als we veranderd 1 tot -1 in de functie (en vice versa), dan wordt de array zou sorteren van de voornamen in aflopende volgorde. Dit is hoe je kunt sorteren op aflopende volgorde.

Hierdoor hebben wij een voorbeeld in de vorm pagina 2 van deze tip (zie pagina 2 link hieronder). Het voorbeeld formulier kunt u in array-elementen (voornaam, achternaam en leeftijd) te bouwen en dan een array levert 3 knoppen voor het sorteren van de array. Het gebruikt het voorbeeld code die op deze pagina, met enkele extra controle, maar u kunt de bron tot de eigenlijke code.

Comments are closed.

Home | info@eecho.info | Voorwaarden | Blog