2

このようなことをしますか?

    var getBoard1 = function(id) {
        return $.grep(me.boards, function (board) {
            return board.Id == id;
        });
    };

それともこういうこと?

    var getBoard2 = function(id) {
        for (var i = 0; i < me.boards.length; i++) {
            var board = me.boards[i];
            if (board.Id == id)
                return board;
        }
        return null;
    };

そして、なぜ、正確さ、読みやすさ、およびパフォーマンスのコンテキストで、その方法を好むのでしょうか? 第三の方法でやりたい場合は、共有してください。

4

4 に答える 4

3

関数は次のようになりgrepます (jQuery v1.8.2):

grep: function( elems, callback, inv ) {
    var retVal,
        ret = [],
        i = 0,
        length = elems.length;
    inv = !!inv;

    // Go through the array, only saving the items
    // that pass the validator function
    for ( ; i < length; i++ ) {
        retVal = !!callback( elems[ i ], i );
        if ( inv !== retVal ) {
            ret.push( elems[ i ] );
        }
    }

    return ret;
}

基本的には同じことをしているので、パフォーマンスに関しては大きな違いはありません。jQuery コードを見ると、常に配列が返されnullます。すでに jQuery を使用している場合は、読みやすいので jQuery バージョンを使用します。それ以外の場合は、ネイティブコードを使用します。

* - 編集 - *

コードを見ると、これが違いを生むことに気づきまし。jQuery がすべての項目をループする最初の項目 (単一の結果のみを期待) が見つかったとき、コードは既に戻ります (そしてループを終了します)。したがって、1 つの結果のみを期待する場合は、バージョンの方が高速です。

于 2013-02-01T11:04:27.963 に答える
1

すでに jQuery に依存している場合は、最初の方法の方が短くて読みやすいため、最初の方法を使用してください。この関数がボトルネックであり、パフォーマンスが許容できないという非常にまれなケースでは、代替の実装について考え始めることができます。

まだ jQuery に依存していない場合は、2 番目のバージョンをお勧めします。これは、トレードオフ (jQuery を使用することと、さらに数行のコードを記述することを含む) の価値がないためです。

于 2013-02-01T10:56:54.473 に答える
0

Array.filter()ブラウザのサポートを気にしない場合は、おそらく最速のネイティブを使用します(IE8-これで死ぬでしょう)。

a.filter(function(e){return e.id == id});

これは、jQuerys grep と同じように、最初の値をフェッチする必要がある配列を返します。

于 2013-02-01T11:00:00.557 に答える