2012-07-05 11 views
16

क्या कोई मौजूदा फ़ंक्शन है जो पहले सामान्य तत्व से मेल खाता पहला सरणी तत्व पाता है?एक सरणी को देखते हुए और अनुमानित करें, पहले मिलान करने वाले तत्व को ढूंढें

$.fn.findFirstMatching = function(predicate) { 
    var result; 
    $.each(this, function(index, value) { 
     if (predicate(index, value)) { 
      result = {index: index, value: value}; 
     } 
    }); 
    if (result) { 
     return result; 
    } 
}; 
+0

मुझे विश्वास नहीं है, निकटतम आईडी $ .grep जो भविष्यवाणी –

उत्तर

11

आप underscore.js का उपयोग करते हैं, तो आप find विधि का उपयोग कर सकते हैं। यह बिना किसी समस्या के तत्वों के संग्रहण संग्रहीत jQuery वस्तुओं के साथ भी काम करता है।

_.find(array, function(value,index) { /* predicate */ }); 

लेकिन इस अतिरिक्त (लेकिन छोटी) लाइब्रेरी के अलावा आपको इसे स्वयं लिखना होगा।

+0

के विरुद्ध सभी से मेल खाता है अच्छा लगता है। यह पता चला है कि हम पहले से ही अंडरस्कोर का उपयोग कर रहे हैं, इसलिए यह और भी आसान है। यहां रुचि रखने वाले किसी भी व्यक्ति के लिए डॉक्टर है: http://underscorejs.org/#find – ripper234

+0

यह ध्यान देने योग्य है कि यह '(value, index)' है, जैसा कि 'jQuery.each' के कॉलबैक के विपरीत है' (सूचकांक, मूल्य) '। – ripper234

-2

Use inArray method of jquery

आप आसानी से अपने खोज तत्व के सूचकांक पता कर सकते हैं।

+1

'inArray' विधि केवल एक मान लेता है, न कि भविष्यवाणी। – Guffa

16

एक अन्य समाधान होगा:

$.grep(yourArray, function (value, index) { return value == 42 })[0] 

ध्यान दें कि बहस के क्रम value, index

Docs for jQuery.grep.

बेशक

, का उपयोग कर _underscore और अधिक सुंदर और कुशल है होना चाहिए (के रूप में $ .grep सरणी के सभी आइटमों पर पूर्वानुमान लागू करता है, यह पहले मैच के बाद नहीं रुकता है) है, लेकिन वैसे भी :)

+0

@ जेएलआरशी, jQuery दस्तावेज बताता है कि आदेश 'मान, सूचकांक' होना चाहिए। – Apelsin

+0

@ एपेलसिन वास्तव में, आप सही हैं। मुझे मूर्खतापूर्ण, मुझे लगता है कि '$ .grep'' $ .each' के अनुरूप था। बाहर निकलता है कि वे थोड़ा सा संगत भी नहीं हैं। – JLRishe

10

ES2015 के रूप में, आप Array.prototype.find

उपयोग कर सकते हैं का उपयोग करने का एक उदाहरण यह इस तरह दिखता है:

// outputs the first odd number 
console.log([2,4,10,5,7,20].find(x => x%2)) 
+1

मुझे यह जवाब सबसे अच्छा लगता है क्योंकि इसे किसी भी तृतीय पक्ष लाइब्रेरी या काम करने के लिए ढांचे की आवश्यकता नहीं है। – northsideknight

1

कस्टम कार्यान्वयन वास्तव में काफी कम है और अभी भी पठनीय हो सकता है:

function findFirst(array, predicate) { 
    for (var i = 0; i < array.length; i++) if (predicate(array[i])) return array[i]; 
} 

यह पहले आइटम मिलान करने वाले (या अपरिभाषित) से पहले आइटम लौटाता है और फिर पुनरावृत्ति रोकता है - यह विशाल सरणी के लिए आसान हो सकता है या यदि अनुमानित कार्य जटिल है।

संबंधित मुद्दे