2012-07-02 15 views
15

Mam tablicę, która jest:Jak wyszukiwać w tablicy w Node.js w sposób nieblokujący?

[ 4ff023908ed2842c1265d9e4, 4ff0d75c8ed2842c1266099b ] 

I muszę znaleźć, jeżeli następujące jest wewnątrz tej tablicy

4ff0d75c8ed2842c1266099b 

Oto co napisał:

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

Najwidoczniej , nie działa poprawnie, lub lepiej czasem działa, ale wygląda na to, że blokuję. Czy jest ktoś, kto może to sprawdzić?

wiele dzięki

+3

"blokowanie"? Nie należy także iterować tablic z 'for in'. W każdym razie, po prostu napisz to jako 'this.indexOf (k)> -1' ... – Ryan

+0

Czy są to obiekty' ObjectId'? – JohnnyHK

+0

Jaka jest definicja blokowania? W węźle zwykle oznacza "oczekiwanie na zakończenie operacji we/wy". – Thilo

Odpowiedz

32

Non-blocking funkcja wyszukiwania

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

Zastosowanie:

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

Jednak dla poszukiwania wartości w tablicy lepiej jest użyć JavaScript wbudowanej tablicy funkcja wyszukiwania, ponieważ będzie znacznie szybsza (tak, że prawdopodobnie nie będzie jej potrzebna do blokowania):

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

także rozważyć bibliotekę underscore co sprawia, że ​​wszystkie rzeczy, cross-platform: http://underscorejs.org/

+2

node.js -> tylko jedna platforma. Tak długo, jak nie musisz tego uruchamiać w przeglądarce, nie potrzebujesz kompatybilności między platformami. – TheHippo

+1

Niemniej jednak lepiej jest pisać kod zgodny ze standardami między platformami, chyba że koszty są zbyt wysokie. – penartur

+4

Myślę, że istnieją różne podejścia do tego. Ze względu na wydajność nie piszę między platformami, jeśli nie trzeba uruchamiać wielu platform. – TheHippo

Powiązane problemy