JSFiddle - React, Tailwind, and code Playground
JavaScript
var obj1 = {
name: "Person1",
rating: 99
}
//Should be 3rd Rank
var obj2 = {
name: "Person2",
rating: 50
}
//Should be 2nd Rank
var obj3 = {
name: "Person3",
rating: 98
}
//Should be 4th Rank
var obj4 = {
name: "Person4",
rating: 0
}
//Should be tied for 1st Rank
var obj5 = {
name: "Person5",
rating: 99
}
var clients = [obj1, obj2, obj3, obj4, obj5];
var sorted = _.chain(clients)
.groupBy('rating')
.pairs()
.sortBy(0)
.reverse()
.pluck(1)
.value();
console.log(sorted);
// returns zero when no rank is found
var getRank = function(sortedArray, object) {
return 1 + _.findIndex(sortedArray, function(list) {
return _.contains(list, object);
});
};
console.log("Person2 rank:", getRank(sorted, obj2));
// You can also use _.bind or _.curry to tie getRank to specific array.
var getRankOfClient = _.curry(getRank)(sorted);
console.log("leaderboard:");
_.chain(clients)
.sortBy('name')
.forEach(function(c) {
console.log(c.name + ": " + getRankOfClient(c));
});