Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to search in an array in Node.js in a non-blocking way?

Tags:

node.js

I have an array which is:

[ 4ff023908ed2842c1265d9e4, 4ff0d75c8ed2842c1266099b ]

And I have to find if the following, is inside that array

4ff0d75c8ed2842c1266099b

Here is what I wrote:

Array.prototype.contains = function(k) {
  for(p in this)
     if(this[p] === k)
        return true;
  return false;
}

Apparently, it doesn't work properly, or better sometimes it works, but it looks to me blocking. Is there anyone that can check that one?

many thanks

like image 202
piggyback Avatar asked Jul 02 '12 01:07

piggyback


1 Answers

Non-blocking search function

Array.prototype.contains = function(k, callback) {
    var self = this;
    return (function check(i) {
        if (i >= self.length) {
            return callback(false);
        }

        if (self[i] === k) {
            return callback(true);
        }

        return process.nextTick(check.bind(null, i+1));
    }(0));
}

Usage:

[1, 2, 3, 4, 5].contains(3, function(found) {
    if (found) {
        console.log("Found");
    } else {
        console.log("Not found");
    }
});

However, for searching the value in the array it is better to use Javascript built-in array search function, as it will be much faster (so that you probably won't need it to be non-blocking):

if ([1, 2, 3, 4, 5].indexOf(3) >= 0) {
    console.log("Found");
} else {
    console.log("Not found");
}

Also, consider the underscore library which makes all the stuff cross-platform: http://underscorejs.org/

like image 159
penartur Avatar answered Nov 15 '22 19:11

penartur