2013-06-26 3 views
0

У меня есть модель просмотра, которую я хочу отсортировать по двум отдельным полям (ala a group by in SQL), сначала одним полем в алфавитном порядке, а затем вторым полем (также в алфавитном порядке) , Сейчас я только сортируюсь по второму полю. У меня есть функция сортировки в машинописном, настроенную как это:Как сортировать по нескольким элементам ViewModel - Knockout

private sortTable(item): any { 
     item.sort(function (left, right) { 
      return left.nm == right.nm? 0 : (left.nm < right.nm ? -1 : 1) 
     }); 

     return item; 
    } 

поля, что я хочу, чтобы сортировать (первое поле) называется Fnm в объекте JavaScript. Может кто-нибудь мне помочь?

Спасибо!

ответ

2
private sortTable(item): any { 
    item.sort(function (left, right) { 

     if (left.FirstSortField == right.FirstSortField) 
      return left.SecondSortField== right.SecondSortField? 0 : (left.SecondSortField< right.SecondSortField? -1 : 1) 
     else 
      return left.FirstSortField == right.FirstSortField ? 0 : (left.FirstSortField < right.FirstSortField ? -1 : 1) 

    return item; 
} 

Обратите внимание, что я не тестировал это.

+0

отлично! Спасибо! – noname

+0

Так полезно. Вам не нужно повторно проверять FirstSortField в блоке else tho. Вы также можете поместить оператор в одну строку с помощью команды? Синтаксис - разработчик должен определить, что более читаемо в их кодовой базе. Благодаря! – stvn

0

Подумайте, первое имя влияет только на сортировку, если фамилия равна.

Заменить 0 в первом выражении с:

(left.fNm == right.fNm ? 0 : (left.fNm < right.fNm ? -1 : 1))