Сортировать по 2 переменным приоритетам 1 - PullRequest
0 голосов
/ 01 июля 2018

У меня есть список posts. Эти сообщения имеют дату (created) и оценку (score). То, что я хотел бы сделать, это отсортировать их по created и score, но иметь score в качестве более важной переменной ..

Другими словами, сортируйте все сообщения в порядке created, но с самым высоким score показывать первым ..

Так по сути:

score: 6, created: july 1 //created is actually a timestamp 1530372915676
score: 4, created: july 1
score: 2, created: july 1
score: 1, created: july 1
score: 5, created: june 30
score: 3, created: june 30

Я нашел этот кусок кода:

array.sort(function (x, y) { return x.created - y.created || x.score - y.score; });

но, похоже, это не работает ..

Каким будет лучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Это может удовлетворить ваши требования. Сначала он будет отсортирован по created в порядке descending, а внутри каждого элемента created он будет отсортирован по score в descending(highest score first). Аналогично запросу sql order by created desc, score desc

arr.sort(function (x, y) { 
       if(x.created != y.created) 
       { 
             return y.created - x.created 
       } 
       else return y.score-x.score
});

РЕДАКТИРОВАТЬ: Это тоже должно работать, без использования if

arr.sort(function (x, y) { return y.created - x.created || y.score - x.score; });
0 голосов
/ 01 июля 2018

Просто поменяйте местами x и y в сравнении результатов. Это сделает более высокий балл первым, если дата создания совпадает:

array.sort(function (x, y) { return x.created - y.created || y.score - x.score; });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...