Сортировка постов по нескольким условий
У меня есть массив с постами. В обьекте хранится id, text, sub, admin. Нужно сделать так, чтобы обьекты у которых admin = true, были самые первые, а остальные по убыванию sub То-есть, не смотря что у обьекта(1) мало sub, он должен отображаться первым так как он admin, следующий id3 и так далее, по убыванию sub.
Есть пока сортировка по sub
const posts = [
{id: 1, text: 'Hi', sub: 4, admin: true},
{id: 2, text: 'Hello', sub:7,admin: false},
{id: 3, text: 'By', sub:100,admin: false}
]
console.log(posts.sort(function(a,b){
return b.sub - a.sub
}))
Ответы (2 шт):
Автор решения: Алексей Шиманский
→ Ссылка
Как-то так:
const posts = [
{id: 1, text: 'Hi', sub: 4, admin: true},
{id: 2, text: 'Hello', sub:7,admin: false},
{id: 3, text: 'By', sub:100,admin: false}
];
console.log(posts.sort((a,b) => b.admin - a.admin || b.sub - a.sub));
Тут, в принципе, так и написано: сортируй по админу или (если нет), то по sub
b.admin - a.admin работает потому, что булева неявно преобразуется в число
Автор решения: Sergey Glazirin
→ Ссылка
const posts = [{
id: 1,
text: 'Hi',
sub: 4,
admin: true
},
{
id: 2,
text: 'Hello',
sub: 7,
admin: false
},
{
id: 3,
text: 'By',
sub: 100,
admin: false
}
]
const sortFunction = (a, b) => {
if (a.admin == b.admin) {
return (a.sub > b.sub) ? -1 : (a.sub > b.sub) ? 1 : 0;
} else {
return (a.admin > b.admin) ? -1 : 1;
}
}
console.log(posts.sort(sortFunction))