Javascript Sorted Set
https://gist.github.com/Xeoncross/54e60227c159bc4f8d16
by Xeoncross
JavaScript
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
// Sort by value while keeping index
Object.prototype.iterateSorted = function(worker, limit)
{
var keys = Object.keys(this), self = this;
keys.sort(function(a,b){return self[b] - self[a]});
if(limit) {
limit = Math.min(keys.length, limit);
}
limit = limit || keys.length;
for (var i = 0; i < limit; i++) {
worker(keys[i], this[keys[i]]);
}
};
// Slice by value while keeping index
Object.prototype.sliceSorted = function(start, end)
{
var keys = Object.keys(this), self = this;
keys.sort(function(a,b){return self[b] - self[a]});
end = Math.min(keys.length, end);
start = Math.min(keys.length, start);
var sliced = {};
var i = 0;
for (var k in keys) {
if (i >= start && i < end) {
sliced[keys[k]] = this[keys[k]];
}
i++;
}
return sliced;
};
// Building a sample map of weights from some random input
var map = {};
for (var i = 0; i < 10; i++) {
var key = String.fromCharCode(getRandomInt(65, 75));
map[key] = (map[key]) ? map[key] + i : i;
}
console.log("map", map);
//
// Usage
//
// Sorting, then parsing the top 5 results
map.iterateSorted(function(key, value) {
console.log("key", key, "value", value)
}, 5);
// Slice from the top 3 results
var slice = map.sliceSorted(0, 3);
console.log('sliceSorted', slice);