2016-08-04 9 views
2

Ich möchte ein Array voller Namen alphabetisch nach Nachnamen mit JQuery oder JavaScript zu sortieren, aber immer in Schleifen und Splits verloren gehen. Kann jemand helfen?Nehmen Sie ein Array voller Namen und sortieren nach Nachnamen

var names = ["Adam Benson", "Clare Donaldson", "Ben Adams", "Donald Clarkson"]; 

Dank und Entschuldigung für was scheint eine sehr einfache Frage!

+1

Lauf. Lauf weit, weit weg. Namen sind immer komplizierter als sie erscheinen. Ist es möglich, dass Sie "Adam James Benson" (z. B. einen zweiten Vornamen) oder "Adam Demby Benson" (z. B. zwei Nachnamen) oder "Adam Charles Copernicus Smith Benson" (z. B. wer weiß) haben? Wenn Sie definitiv nur zwei Namen haben und es ist definitiv der zweite, den Sie wollen, gibt es Antworten unten, um das zu adressieren. Sei vorsichtig mit realen Namensdaten. – VoteyDisciple

+0

Pablo Diego José Francisco de Paula Juan Nepomuceno María de los Remedios Cipriano de la Santísima Trinidad Ruiz y Picasso, besser bekannt als Pablo Picasso –

+0

@VoteyDisciple Ja, ich wünschte mir, die Daten, die ich benutzte, hatten "first-name", "last- Name "aber was kannst du tun? Nur für eine kleine Übung, also wird es hoffentlich kein Problem werden! – dedaumiersmith

Antwort

2

Tun Sie es mit Hilfe von Array#sort, String#split und String#localeComapre Methoden.

var names = ["Adam Benson", "Clare Donaldson", "Ben Adams", "Donald Clarkson"]; 
 

 
// sort array with custom functions 
 
names.sort(function(a, b) { 
 
    // compare lastname part for sorting 
 
    return a.split(' ')[1].localeCompare(b.split(' ')[1]); 
 
}) 
 

 
console.log(names);

FYI: Falls Name enthält mittlerer Name Teil name.split(' ').pop() dann name.split(' ')[1] ändern das letzte Element von Array zu bekommen (was thw Nachname ist).

+0

Perfekt, danke! (Für diese und für meine Aufmerksamkeit auf localeCompare) – dedaumiersmith

+0

@GilesTaylor: froh, Ihnen zu helfen :) –

+0

Aber würde zB "Alberto De Sousa" –

2

Sie können dies erreichen mit einer sort() Funktion, die die Werte von Raum teilt und vergleicht die letzten Werte des resultierenden Array:

var names = ["Adam Benson", "Clare Donaldson", "Ben Adams", "Donald Clarkson"]; 
 
names.sort(function(a, b) { 
 
    var aSurname = a.split(' ').pop(); 
 
    var bSurname = b.split(' ').pop(); 
 
    return aSurname < bSurname ? -1 : aSurname > bSurname ? 1 : 0; 
 
}) 
 

 
console.log(names);

Sie würden möglicherweise brauchen auch eine Validierung hinzufügen zu diesem Code, wenn der angegebene Name keine Leerzeichen enthält.

+0

Danke dafür! Dies ist nur für eine kleine Übung, die ich mache, aber danke für den Kopf über die Validierung. – dedaumiersmith