2016-05-12 12 views
0

Wie sortieren Sie ein Array wie dieses fullnamearray.push(firstname +" "+ lastname);? Ich möchte es nach Nachnamen nicht Vorname sortieren. Die Liste sollte Vorname gefolgt von Nachname angezeigt werden.Sortieren Array mit mehreren Werten in Javascript

Code

fullnamearray.push(firstname +" "+ lastname); 
fullnamearray.sort(); 
    for(var i = 0; i < fullnamearray.length; i++){ 
       Name.innerHTML += '<li>' + fullnamearray[i] + '</li>'; 
       } 
+0

posten Sie bitte den Inhalt von fullnamearray array – brk

+0

Dann baue das Array nicht so. Vielleicht 'namearray.push ({Vorname: Nachname, Nachname: Nachname})'. Oder 'push ([Vorname, Nachname])'. Auf diese Weise können Sie es sortieren, ohne die Zeichenfolge erneut zu teilen (was bei Leuten wie "Norma Jean Baker" nicht einmal funktioniert) – Thilo

Antwort

1

verketten sie Sie ausgegeben, wenn, nicht, wenn Sie speichern:

fullnamearray.push([lastname, firstname]); 
fullnamearray.sort(); 
for(var i = 0; i < fullnamearray.length; i++){ 
    Name.innerHTML += '<li>' + fullnamearray[i][1] + " " + fullnamearray[i][0] + '</li>'; 
} 
+0

Funktioniert 'sort' bei Array-ähnlichen Elementen ohne Komparatorfunktion? – Thilo

+0

@ george.Thank es funktioniert! – JessieBear

+0

@Thilo: Ja, weil der Standardkomparator 'x.toString() <> y.toString()' ist und 'toString' für Arrays gut definiert ist. – georg

0

Ich möchte es sortieren nach Nachname nicht Vorname. Die Liste sollte angezeigt werden Vorname Nachname gefolgt von.

fullnamearray.sort(function(a,b){ 
    var lastNameA = a.split(" ")[1]; 
    var lastNameB = b.split(" ")[1]; 
    return lastNameA.localeCompare(lastNameB); 
}) 

Jetzt können Sie die Liste in der gleichen Art und Weise angezeigt werden Sie früher taten.

Above Methode schlägt fehl, wenn firstname oder lastname ein Leerzeichen dazwischen hat, so können Sie vielleicht folgen, was @Thilo

vorgeschlagen hat
fullnamearray.push({first: firstname, last: lastName}); 
fullnamearray.sort(function(a,b){ 
    var lastNameA = a.lastName; 
    var lastNameB = b.lastName; 
    return lastNameA.localeCompare(lastNameB); 
}); 

und Anzeigeliste als

for(var i = 0; i < fullnamearray.length; i++){ 
    Name.innerHTML += '<li>' + fullnamearray[i].firstName + " " + fullnamearray[i].lastName '</li>'; 
} 
0

Try this:

fullnamearray.push(firstname +" "+ lastname); 
fullnamearray.sort(function (name1, name2) { 
    return name1.split(' ')[1] > name1.split(' ')[1]; 
}); 
Verwandte Themen