2009-05-20 14 views
10

मैं एक जावास्क्रिप्ट समारोह .. कि एक स्ट्रिंग और एक सरणी में ले जा सकते हैं, और सच वापसी करता है, तो यह है कि स्ट्रिंग सरणी में है की जरूरत हैजावास्क्रिप्ट समारोह inArray

function inArray(str, arr){ 
    ... 
} 

चेतावनी: यह किसी भी जावास्क्रिप्ट चौखटे उपयोग नहीं कर सकते ।

उत्तर

7

आप arr.indexOf उपयोग कर सकते हैं()

http://www.w3schools.com/jsref/jsref_indexof_array.asp

+0

दिलचस्प। यह उत्तर (.indexOf (।)) मेरे उद्देश्य के लिए काम करता प्रतीत होता है। एक नौसिखिया के रूप में जानना उत्सुक है कि भाषा में एक विधि को कस्टम फ़ंक्शन के लिए क्यों पसंद किया गया होगा। – prototype

+0

मुझे एहसास है कि उपर्युक्त पुराना है लेकिन भविष्य के पाठकों के लिए उत्तर देने योग्य है। array.indexOf() जावास्क्रिप्ट 1.6 है। जावास्क्रिप्ट के पुराने संस्करण, जो इंटरनेट एक्सप्लोरर में पाए जाते हैं, इसका समर्थन नहीं करते हैं इसलिए हम जहां आवश्यक हो वहां एक कस्टम विधि/पॉलीफिल का उपयोग करेंगे। – n0wak

+0

एमडीएन में एक पॉलीफिल है जिसे आप काट और पेस्ट कर सकते हैं: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf –

18

तुम बस एक सरणी प्रोटोटाइप समारोह आला बना सकता है:

Array.prototype.hasValue = function(value) { 
    var i; 
    for (i=0; i<this.length; i++) { if (this[i] === value) return true; } 
    return false; 
} 

if (['test'].hasValue('test')) alert('Yay!'); 

नोट '=== "के उपयोग के बजाय' == 'आप को बदल सकता है कि आप कम विशिष्ट मिलान की जरूरत है ... अन्यथा [3]। हसवैल्यू ('3') झूठी वापसी करेगा।

+3

के लिए (...) में वर सहित के सूचकांक मिल जाएगा तार्किक भ्रामक है , जैसा कि यह सुझाव देता है कि var का दायरा केवल लूप के अंदर है (बहुभाषी प्रोग्रामर के लिए)। हालांकि, दायरा पूरे समारोह है। साथ ही, उनके दायरे में उच्चतम बिंदु पर चर घोषित करना आमतौर पर एक अच्छा अभ्यास और स्कोप संघर्ष से बचने का एक शानदार तरीका माना जाता है। – Kato

1

this related question पर एक नज़र डालें। शीर्ष वोट वाले उत्तर से कोड यहां दिया गया है।

function contains(a, obj) { 
    var i = a.length; 
    while (i--) { 
    if (a[i] === obj) { 
     return true; 
    } 
    } 
    return false; 
} 
8

ऐसा कुछ?

function in_array(needle, haystack) 
{ 
    for(var key in haystack) 
    { 
     if(needle === haystack[key]) 
     { 
      return true; 
     } 
    } 

    return false; 
} 
+5

शायद मुझे (सरणी में कुंजी) के लिए उपयोग नहीं किया जाना चाहिए था। अगर किसी ने ऐरे ऑब्जेक्ट को बढ़ाया है तो यह नए तरीकों/गुणों के साथ-साथ (केवल सरणी मानों) पर पुन: सक्रिय नहीं होगा। – Matthew

+0

-1 Array.prototype.indexOf(), अंडरस्कोर, जेक्यूरी इत्यादि जैसी लाइब्रेरी के साथ फ़ॉलबैक का उपयोग करने के लिए बेहतर है, और अंततः यदि कोई लाइब्रेरी नहीं चाहता या उपलब्ध है तो ऑब्जेक्ट.प्रोटोटाइप.hasOwnProperty() को छोड़कर उपरोक्त समाधान का उपयोग करें। – martin

-1

सावधान:

indexOf() आंशिक डेटा का उपयोग करता है। अगर आप '12', '1'

indexOf ('1') है आप '12' नहीं '1'

+0

मुझे लगता है कि आप गलत हैं मैं नीचे वोट नहीं दे सकता आप लेकिन क्या आप कृपया अपने उत्तर का समर्थन कर सकते हैं? my jsfiddle [here] (http://jsfiddle.net/DDWr6/) साबित करता है कि आप गलत हैं – Andreas

+0

मुझे लगता है कि आपने इंडेक्स को भ्रमित कर दिया है, उपरोक्त उदाहरण आपको एक इंडेक्स देगा जो '1' के लिए सही सूचकांक है। हमेशा याद रखें कि पहले सरणी तत्व में शून्य की अनुक्रमणिका है जो '12' की अनुक्रमणिका है, अपने उदाहरण की सटीक प्रतिकृति देखें [यहां] (http://jsfiddle.net/DDWr6/) – Andreas

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