Вы можете создать массив строк значков на основе их «важности», а затем иметь функцию .sort
, которая сортирует по:
- разнице в
datecrea
с. Если ноль, то на - разница в
downloads
. Если ноль, то на - Разница в индексе значка в массиве строк значка
const badges = ['soon', 'new', 'topten', ''];
array.sort((a, b) => (
(badges.indexOf(a.datas.badge) - badges.indexOf(b.datas.badge)) ||
(new Date(b.datecrea) - new Date(a.datecrea)) ||
(b.datas.downloads - a.datas.downloads)
));
const badges = ['soon', 'new', 'topten', ''];
var array = [{
"datecrea":"2020-01-31T16:14:46+01:00",
"datas":{
"badge":"new",
"downloads":1,
},
},
{
"datecrea":"2020-01-31T17:14:46+01:00",
"datas":{
"badge":"soon",
"downloads":0,
},
},
{
"datecrea":"2020-01-31T18:14:46+01:00",
"datas":{
"badge":"",
"downloads":3,
},
},
{
"datecrea":"2020-01-31T19:14:46+01:00",
"datas":{
"badge":"topten",
"downloads":5,
},
},
{
"datecrea":"2020-01-31T20:14:46+01:00",
"datas":{
"badge":"new",
"downloads":1,
},
},
{
"datecrea":"2020-01-31T20:14:46+01:00",
"datas":{
"badge":"",
"downloads":1,
},
}]
array.sort((a, b) => (
(badges.indexOf(a.datas.badge) - badges.indexOf(b.datas.badge)) ||
(b.datas.downloads - a.datas.downloads) ||
(new Date(b.datecrea) - new Date(a.datecrea))
));
console.log(array);
Не звоните .sort
дважды - звоните только один раз, и поместите все логи c в этот один обратный вызов. Если вы дважды наберете .sort
, отсортированные результаты по первому .sort
будут потеряны, поскольку массив будет полностью пересортирован по второму .sort
.
.