Как искать в массиве в Node.js неблокирующим способом?

У меня есть массив, который:

[ 4ff023908ed2842c1265d9e4, 4ff0d75c8ed2842c1266099b ]

И я должен найти, если следующее внутри внутри этого массива

4ff0d75c8ed2842c1266099b

Вот что я написал:

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

По-видимому, он работает неправильно или лучше иногда работает, но мне кажется, что он блокирует. Есть ли кто-нибудь, кто может проверить это?

большое спасибо

1 ответ

Неблокирующая функция поиска

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

Использование:

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

Однако для поиска значения в массиве лучше использовать функцию поиска встроенного массива Javascript, так как она будет намного быстрее (так что вам, вероятно, не понадобится, чтобы она не блокировалась):

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

Также рассмотрим библиотеку underscore, которая делает все кросс-платформенное: http://underscorejs.org/

licensed under cc by-sa 3.0 with attribution.