如何以非阻塞方式在Node.js中的数组中搜索?

如何以非阻塞方式在Node.js中的数组中搜索?,node.js,Node.js,我有一个数组,它是: [ 4ff023908ed2842c1265d9e4, 4ff0d75c8ed2842c1266099b ] 我必须找到下面的,是否在数组中 4ff0d75c8ed2842c1266099b 以下是我写的: Array.prototype.contains = function(k) { for(p in this) if(this[p] === k) return true; return false; } 显然,它不能正常工作,或

我有一个数组,它是:

[ 4ff023908ed2842c1265d9e4, 4ff0d75c8ed2842c1266099b ]
我必须找到下面的,是否在数组中

4ff0d75c8ed2842c1266099b
以下是我写的:

Array.prototype.contains = function(k) {
  for(p in this)
     if(this[p] === k)
        return true;
  return false;
}
显然,它不能正常工作,或者更好的是有时它能工作,但在我看来它是阻塞的。有人能检查一下吗


非常感谢

非阻塞搜索功能

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内置的数组搜索功能,因为它会更快(因此您可能不需要它是非阻塞的):


也要考虑<代码>下划线< /代码>库,这使得所有的东西都是跨平台的:

“阻塞”?另外,不要在中使用
for迭代数组。无论如何,只要把它写成
this.indexOf(k)>-1
…这些是
ObjectId
对象吗?你对阻塞的定义是什么?在Node中,它通常意味着“等待I/O完成”。@Thilo yep我的意思是JohnnyHK是的,minitech您想把它作为答案吗?Node.js-->只有一个平台。只要你不需要在浏览器中运行,你就不需要跨平台兼容性。但是,编写跨平台标准兼容代码更好,除非成本太高。我认为有不同的方法可以做到这一点。为了提高性能,如果不需要跨平台运行,我就不会编写跨平台的代码。等等,这甚至是不正确的。你测试过吗?搜索定义在哪里?@MatBee有一个错误类型(已修复)。在SO上编写代码的目的不是为提出问题的人制作一个可供生产使用的库,而是展示一个想法,一个应该研究的方向。我相信我无意中造成的错误并没有阻止任何人理解一个想法,也没有阻止任何人理解如何修复错误。
if ([1, 2, 3, 4, 5].indexOf(3) >= 0) {
    console.log("Found");
} else {
    console.log("Not found");
}