Рассмотрим следующий сценарий, где мне нужно отсортировать список студентов по имени и баллу.
[
{
name: 'Max',
score: 94
},
{
name: 'Jerome',
score: 86
},
{
name: 'Susan',
score: 86
},
{
name: 'Abel',
score: 86
},
{
name: 'Kevin',
score: 86
}
]
Я хочу отсортировать список учеником, который набрал наивысший результат, но если у двух или более учеников одинаковый балл, то я хочу сортировать этих учеников по алфавиту. Для вышеуказанного случая результат должен быть следующим:
[
{
name: 'Max',
score: 94
},
{
name: 'Abel',
score: 86
},
{
name: 'Jerome',
score: 86
},
{
name: 'Kevin',
score: 86
},
{
name: 'Susan',
score: 86
}
]
Как я могу это достичь? Есть ли какая-нибудь функция lodash, которую я могу использовать, или это возможно с использованием чистого JavaScript?
Никакой библиотеки не нужно, просто сравните score
, и если это произойдет до 0, сравните имена:
const arr=[{name:'Max',score:94},{name:'Jerome',score:86},{name:'Susan',score:86},{name:'Abel',score:86},{name:'Kevin',score:86}]
console.log(
arr.sort((a, b) => b.score - a.score || a.name.localeCompare(b.name))
);
Сначала отсортируйте массив по результату и, если оба показателя равны, сортируйте их по имени. Рассмотрим ниже код для него:
let obj = [
{
name: 'Max',
score: 94
},
{
name: 'Jerome',
score: 86
},
{
name: 'Susan',
score: 86
},
{
name: 'Abel',
score: 86
},
{
name: 'Kevin',
score: 86
}
];
obj.sort((a,b) => {
if(b.score - a.score === 0){
if(a.name < b.name) return -1;
if(a.name > b.name) return 1;
return 0;
}
else{
return b.score - a.score;
}
});
console.log(obj);
Вы можете сортировать по _.sortBy
и взять список propertis и другой для заказа.
var array = [{ name: 'Max', score: 94 }, { name: 'Jerome', score: 86 }, { name: 'Susan', score: 86 }, { name: 'Abel', score: 86 }, { name: 'Kevin', score: 86 }];
console.log(_.sortBy(array, ['score', 'name'], ['desc', 'asc']))
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>
Попробуйте следующее:
var arr = [
{
name: 'Max',
score: 94
},
{
name: 'Jerome',
score: 86
},
{
name: 'Susan',
score: 86
},
{
name: 'Abel',
score: 86
},
{
name: 'Kevin',
score: 86
}
];
arr.sort((a,b)=>{
return (b.score - a.score) || a.name.localeCompare(b.name);
});
console.log(arr);