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);