15

私は次のような配列を持っています:

[ 4ff023908ed2842c1265d9e4, 4ff0d75c8ed2842c1266099b ]

そして、以下がその配列内にあるかどうかを確認する必要があります

4ff0d75c8ed2842c1266099b

ここに私が書いたものがあります:

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

どうやら、正しく動作しないか、動作することもありますが、ブロックしているように見えます。それを確認できる人はいますか?

どうもありがとう

4

1 に答える 1

32

ノンブロッキング検索機能

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/

于 2012-07-02T04:59:09.267 に答える