Reputation: 130304
var foo = {a:1, b:2, c:3, d:4, e:5, f:6, g:7}
{e:5, f:6, g:7}
For a given key/value basic object, how would you get the 3 top values, but not just the values but also the keys? keys could be anything. lets say values are integers.
performance should be in mind.
Upvotes: 4
Views: 3774
Reputation: 224983
Get key/value pairs:
let pairs = Object.entries(foo);
Sort them:
pairs.sort((a, b) => a[1] - b[1]);
Turn some back into an object:
let result = Object.fromEntries(pairs.slice(-3));
Upvotes: 2
Reputation: 413757
You can extract the properties into an array, then sort the array:
var foo = {a:1, b:2, c:3, d:4, e:5, f:6, g:7}
var props = Object.keys(foo).map(function(key) {
return { key: key, value: this[key] };
}, foo);
props.sort(function(p1, p2) { return p2.value - p1.value; });
var topThree = props.slice(0, 3);
If you want the result as an object, just reduce it back to one
var topThreeObj = props.slice(0, 3).reduce(function(obj, prop) {
obj[prop.key] = prop.value;
return obj;
}, {});
Upvotes: 11