Найдите function ranking(people)
, который принял массив объектов в качестве входных данных.Keys
: Name
и Points
.Он должен вернуть отсортированный массив с самыми высокими точками в первой позиции, 2-й самой высокой во второй ... Он должен содержать клавишу third
: Position
.Пока все хорошо.
Проблема: если два значения одного и того же ключа одинаковы, тогда оба объекта должны быть помещены в один и тот же position.
Пример:
ranking([{name: "John",points: 100},{ name: "Bob",points: 130},{name: "Mary", points: 120},{name: "Kate",points: 120}]);
Поскольку Боб занимает самое высокое место, эти объекты должны быть возвращены в первую очередь.Мэри и Кейт занимают второе место.Так что оба должны быть расположены в позиции: 2.
Это часть, с которой я борюсь.Мой код до сих пор (кроме проблемной части, которую я поставил отдельно)
function ranking(people) {
people.sort((a, b) => (a.points > b.points ? -1 : 1));
for (var i = 0; i < people.length; i++) {
Object.assign(people[i], { position: i + 1 });
}
console.log(people);
}
Я попытался сравнить клавиши точек в цикле for, как
if(people[i].points === people[i+1].points) {
people[i+1].position === i;
}
который не работает.Я думаю, что мне нужно использовать map
или for…in
, но я не знаю, как ...
РЕДАКТИРОВАТЬ:
Вывод должен быть:
name: "Bob", points: 130, position: 1
name: "Kate", points: 120, position: 2
name: "Mary", points: 120, position: 2
name: "John", points: 100, position: 3 **NOT 4**
После прочтения некоторых подсказок, которые я придумал:
for (var j = 1; j < people.length; j++) {
if (people[j - 1].points === people[j].points) {
people[j].position = j;
}
}
Но в чем проблема, что нет позиции 3 - просто position: 4