2017-07-26 12 views
1

前出、私はこのコードを持っている:jQueryの.filter():最後

var image_match = $('#my_id image').filter(function(i, el) { 
    return el.attributes.x.value == x_image; 
}); 

$('#my_id image')は非常に長い配列(数千)を与えるが、幸運にも私は1つ、一般的にだけで(テストに合格するどのように多くの要素を知っています)私は要素を見つけるとすぐに 'ループ'を止めることができました。問題は、どうやって(あるいは可能なのか)わからないことです。

これは効率を上げるためのもので、効率的なソリューションを探しています。

多分このようなものですが、効率的ですか?すべての要素にそのロジックを適用するために設計されていますよう

var target_number=3;//or whatever 
var image_match = $('#my_id image').filter(function(i, el) { 
    var counter=0; 
    if (el.attributes.x.value == x_image) { 
     counter+=1; 
    }; 
    if (counter==target_number) { 
     return el.attributes.x.value == x_image; 
     break;//return (false);//exit 
    } 
    return el.attributes.x.value == x_image; 
}); 
+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findまたはfindIndex? – mkaatman

+0

正確に重複しますが、これはより良い質問かもしれませんか? https://stackoverflow.com/questions/33264318/can-jquerys-filter-be-used-such-that-it-stops-searching-when-the-first-element/33264354#33264354 –

答えて

2

あなたはfilter()ループから抜け出すことはできません。

ループを早期に終了したい場合は、ロジックをeach()に変更することをお勧めします。そして、あなたはreturn false;ループを終了することができます:それは代わりにjQueryオブジェクトの配列になります以外

var target_number = 3, matches = []; 

$('#my_id image').each(function(i, el) { 
    if (el.attributes.x.value == x) { 
    matches.push($(this)); 

    if (matches.length == target_number) 
     return false; 
    } 
}); 

matchesは今、あなたのimage_match変数の内容とほぼ同じになります。

+0

@DarthJDGありがとう、私最後の '}'を逃しました –

+0

問題はありません、卑劣な編集にごめんなさい。 ;) – DarthJDG

関連する問題