2017-02-22 21 views
1

Вопрос: Как сортировать мой data массив двумя свойствами:Сортировка по двум свойствам, где приоритет имеет общие значения?

  1. где type всегда на вершине и
  2. где граф всегда от наименьшего к наибольшему.

Это мое усилие:

var data = [ 
    {type: 'first', count: '1'}, 
    {type: 'second', count: '5'}, 
    {type: 'first', count: '2'}, 
    {type: 'second', count: '2'}, 
    {type: 'second', count: '1'}, 
    {type: 'first', count: '0'}, 
] 

//Expected 
var newData = [ 
    {type: 'first', count: '0'}, 
    {type: 'first', count: '1'}, 
    {type: 'first', count: '2'}, 
    {type: 'second', count: '1'}, 
    {type: 'second', count: '2'}, 
    {type: 'second', count: '5'}, 
] 

//**Pseudo code**// 
// Will put the types on top 
data.sort((a,b) => a.type === 'first' ? -1:0) 

// This will sort the count 
data.sort((a,b) => a.count < b.count ? -1 ? (a.count > b.count ? 1:0) 

Поскольку количество акций значения между различными типами, я нахожу, что это трудно решить. Как я могу сортировать оба эти свойства, но всегда держать тип сверху и рассчитывать всегда в порядке от малого до большого?

+0

Почему нет никакого типа ': 'второй', граф:«1'' элемент в вашем 'newData'? Вы ожидаете, что ваш алгоритм «сортировки» опустит его, потому что последний элемент 'first' имеет' count' больше своего? –

+0

Извините, хороший улов –

+0

Сколько типов может быть там? Возможно, вам придется написать собственный сортимент для этого –

ответ

1

Вы можете использовать метод sort().

var data = [ 
 
    {type: 'first', count: '1'}, 
 
    {type: 'second', count: '5'}, 
 
    {type: 'first', count: '2'}, 
 
    {type: 'second', count: '2'}, 
 
    {type: 'second', count: '1'}, 
 
    {type: 'first', count: '0'}, 
 
] 
 

 
var result = data.sort(function(a, b) { 
 
    return ((b.type == 'first') - (a.type == 'first')) || (a.count - b.count) 
 
}) 
 

 
console.log(result)

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

  • Нет связанных вопросов^_^