2016-05-12 4 views
0

Как отсортировать массив, подобный этому fullnamearray.push(firstname +" "+ lastname);? Я хочу отсортировать его по имени, а не по первому. В списке должно отображаться первое имя с последующим именем.Сортировка массива с несколькими значениями в Javascript

код

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

, пожалуйста, отправьте содержимое массива fullnamearray – brk

+0

Не создавайте такой массив. Может быть, 'namearray.push ({first: firstname, last: lastName})'. Или 'push ([имя, фамилия])'. Таким образом, вы можете отсортировать его, не разделяя строку снова (что может даже не работать для таких людей, как «Norma Jean Baker») – Thilo

ответ

1

Объединить их при выводе, а не когда вы храните:

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

Работает ли 'sort' с элементами типа массива без функции компаратора? – Thilo

+0

@ george.Спасибо вам за работу! – JessieBear

+0

@Thilo: да, поскольку компаратор по умолчанию - 'x.toString() <> y.toString()', а 'toString' хорошо определен для массивов. – georg

0

Я хочу, чтобы отсортировать его фамилия не Firstname. В списке должно быть отображается первое имя, за которым следует последнее имя.

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

Теперь вы можете отобразить список в том же порядке, вы делали раньше.

выше метод не сработает, если firstname или lastname имеет пробел между ними, так что, может быть, вы можете следить за то, что @Thilo предложил

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

и список отображения, как

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

Попробуйте это:

fullnamearray.push(firstname +" "+ lastname); 
fullnamearray.sort(function (name1, name2) { 
    return name1.split(' ')[1] > name1.split(' ')[1]; 
}); 
Смежные вопросы