qiao / heap.js

A binary heap implementation in CoffeeScript/JavaScript.
MIT License
125 stars 27 forks source link

Function Request. All less than a value. #7

Open jvonmitchell opened 10 years ago

jvonmitchell commented 10 years ago

Hi,

It would make this library really useful if we could get a list of items less than a certain value or if there were a way to extrapolate that data without mutating the heap.

Here is a function I made which you are welcome to use.

Heap.prototype.peekTo = function(value,cmp) { var c; if(cmp===null) { cmp=this.cmp; } for(c=0;c<this.nodes.length;++c) { if(cmp(value,this.nodes[c]) <= 0) { break; } } return this.nodes.slice(0,c); }

There is an option to provide a compare function in case we need to compare something like {someValue:....} and value without creating a new instance of the objects used in the heap.

JAForbes commented 9 years ago

I'm fairly sure the underlying nodes array is exposed as heap.nodes.

So you could use normal array functions like every to do any inspection you would like:


var greaterThan = function(value, node){

  if(typeof node == "undefined") return greaterThan.bind(null, value)

  return node > value
}

heap.nodes
  .every(greaterThan(5)) //=> ( true || false )

You could substitute greaterThan for any function you wish.