Remembers the highest/lowest values in a data set of any size. Useful if you have a large number of values, but are only interested in the n
highest (or lowest) ones. If you looking for a stream version, check out hifo-stream.
- hifo is fast. To find the highest
m
ofn
values, the time complexity isO(m * n)
. - It is memory-efficient. If you specifiy its size as
50
, it will only store 50 values in memory. - hifo works with numeric values and simple objects out of the box, but you can pass your own
sort
function.
Let's assume we have a huge array of people.
var people = [
{ name: 'Alice', age: 23 },
{ name: 'Eve', age: 45 },
{ name: 'Jane', age: 19 },
{ name: 'Bob', age: 30 },
{ name: 'John', age: 60 },
// thousands of others
];
To find the 3 oldest people, we reate a new Hifo
instance and pass the 'age'
as the filter key and 3
as the size.
var hifo = require('hifo');
var oldest = hifo(hifo.highest('age'), 3);
for (var person in people) {
oldest.add(person);
}
oldest.data
will now look like this:
[
{ name: 'John', age: 60 },
{ name: 'Eve', age: 45 },
{ name: 'Bob', age: 30 }
]
Of course you can do this kind of filtering with hifo.lowest
as well.
If you have a question, found a bug or want to propose a feature, have a look at the issues page.