2013-05-08 4 views
3
var data = [{ 
    "priority": "1", 
    "date": "01.03.2013", 
    "title": "Yeah hi" 
}, { 
    "priority": "2", 
    "date": "", 
    "title": "Another title" 
}, { 
    "priority": "2", 
    "date": "22.12.2013", 
    "title": "Foo" 
}, { 
    "priority": "1", 
    "date": "10.04.2013", 
    "title": "Hey there" 
}, { 
    "priority": "2", 
    "date": "15.08.2013", 
    "title": "Hello world" 
}, 
... 
] 

У меня есть многомерный массив, и я хочу его сортировать сложным способом.Сортировка многомерного массива по нескольким критериям

  1. Сначала сортировать по «Приоритет» - наивысший приоритет первого
  2. Затем сортировать все элементы с одинаковым приоритетом по «дата» - на следующую дату около сегодня первый (есть только даты в будущем). И если у элемента нет даты, поставьте его в конце.
  3. Сортировать все элементы с той же датой (и все без даты) по «названию» - по алфавиту

Первый шаг это не проблема с data.sort(), но тогда я не имею никакого плана для выполнения что. Как это сделать?

+0

Возможный дубликат: http://stackoverflow.com/questions/3886165/javascript-sort-multidimensional-array –

+0

Было бы дубликатом, если я только хочу, чтобы сортировать по приоритету. Но это не моя проблема ... –

+1

Это же _principle_ хотя - вы пишете свою собственную небольшую функцию сравнения, которая сравнивает два элемента в соответствии со всеми вашими критериями, пока не сможет решить, какой из них «меньше», чем другой (или узнайте, что в конечном итоге они будут считаться равными). – CBroe

ответ

5

Одно из возможных решений

data.sort(function(a,b) { 
    if (parseInt(a.priority) > parseInt(b.priority)) 
    return 1; 
    else if (parseInt(a.priority) < parseInt(b.priority)) 
    return -1; 
    else if (a.date > b.date) 
    return 1; 
    else if (a.date < b.date) 
    return -1; 
    else if (a.title > b.title) 
    return 1; 
    else if (a.title < b.title) 
    return -1; 
    else 
    return 0; 
}); 

Вы должны изменить поле даты, чтобы быть какой-то Epox или чего-л (вы можете исправить это самостоятельно).

Демо: http://jsbin.com/adosuh/1/edit

Смежные вопросы