2016-10-24 2 views
0

Учитывая массив:Как отсортировать массив в уникальном порядке

var myList = [ 'Normal', 'Urgent', 'Alert', 'Casual', 'Follow up' ]; 

Я хочу вывести этот список, скажем, в раскрывающемся списке. Я хочу "Срочно 'для отображения вверх, а затем' Alert '. Остальные должны быть отсортированы в алфавитном порядке.

Я знаю, что могу сортировать по алфавиту весь массив с myList.sort(), но есть ли способ отсортировать этот список по моим уникальным требованиям? Я надеюсь, что это можно сделать как массив, не преобразовывая его в объект и не назначая идентификаторы приоритетов, но я могу ошибаться.

Кроме того, что, если не существует Срочного или Предупреждения?

EDIT: Вот что я пробовал: https://jsfiddle.net/reala/rqacrz0k/

+0

Мой вопрос говорит, что я пытался myList.sort(), может быть, я написал это на испанском языке – bruh

+0

Вы будете нуждаться функцией сортировки компаратора, что использует альтернативный ключ сортировки для вещей, которые вам нужно сортировать, отличные от обычного. – Pointy

+0

@bruh В решении этой проблемы. Что вы пробовали решить текущую проблему, т.е. написать функцию, чтобы делать то, что вы хотите? – Li357

ответ

2

Вы могли бы использовать объект для порядка сортировки.

var array = [ 'Normal', 'Urgent', 'Alert', 'Casual', 'Follow up' ]; 
 

 
array.sort(function (a, b) { 
 
    var order = { Urgent: -2, Alert: -1 }; 
 
    return (order[a] || 0) - (order[b] || 0) || a.localeCompare(b); 
 
}); 
 

 
console.log(array);

+1

Хорошее решение! ;-) – trincot

2

Это лучше, если вы храните ваши приоритетные элементы отдельно от основного списка, если вы не можете гарантировать, что они будут присутствовать. Я бы отфильтровал эти элементы, отсортировал остальные и объединил результаты с вашим специальным списком.

var special = ["Urgent","Alert"]; 
 
var myList = [ 'Normal', 'Urgent', 'Alert', 'Casual', 'Follow up' ]; 
 

 
myList = special.concat(myList.filter(function(el){ return special.indexOf(el) == -1; }).sort()); 
 
    
 
alert(myList);

1

Вы можете использовать фильтр, чтобы получить специальные значения, сортировать остальное, и конкатенации части:

var myList = [ 'Normal', 'Urgent', 'Alert', 'Casual', 'Follow up' ]; 
 

 
myList = myList.filter(v => v === 'Urgent').concat(
 
      myList.filter(v => v === 'Alert'), 
 
      myList.filter(v => !['Alert','Urgent'].includes(v)).sort()); 
 

 
console.log(myList);

1

var myList = [ 'Normal', 'Urgent', 'Alert', 'Casual', 'Follow up' ]; 
 

 
console.log(['Urgent', 'Alert', ...myList.filter(item => item !== 'Urgent' && item !== 'Alert').sort()]);