2012-01-13 8 views
6

मुझे array.indexOf() की खराब क्रॉसब्रोसर संगतता से अवगत नहीं था। लेकिन अब मैं हूं, मुझे एक ही चीज़ को हासिल करने का तरीका ढूंढना है, लेकिन पिछली विधि का उपयोग किए बिना।क्रॉसब्रोसर "इनएरे" फ़ंक्शन (jQuery के बिना)

मैंने थोड़ी देर के लिए googling की कोशिश की, लेकिन कोई असली ठोस जवाब नहीं मिला। अभी के लिए, मैं छोरों के साथ कर रहा हूँ (लेकिन यह धीमी है और मुझे यकीन है कि वहाँ बेहतर तरीके हैं रहा हूँ)

साइड नोट्स:

  • मैं jQuery या किसी अन्य पुस्तकालयों/चौखटे उपयोग नहीं कर सकते ।
  • यह जरूरी कैसे सरणी लूप जांच सूचकांक (एक बस सही/गलत ठीक हो जाएगा)

मैंने सोचा कि यह आवश्यक मेरी कोड साझा करने के लिए, के बाद से आप सभी जानते नहीं है वापस जाने के लिए की जरूरत नहीं है की तरह दिखता है (प्लस यह आपके बुद्धि कम करेगा)

+0

आप मोज़िला द्वारा प्रदान की गई ['indexOf' shim] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf#Compatibility) का उपयोग कर सकते हैं। –

+0

आप [आईएस 5-शिम] (https://github.com/kriskowal/es5-shim) के साथ 'आईई लेफ्टिनेंट 9' की आपूर्ति करना चाहते हैं ... –

+0

लूप्स बिल्कुल खराब नहीं हैं। [वी 8 का 'इंडेक्सऑफ' भी एक तक उबाल जाता है।] (Http://www.google.com/codesearch#OAMlx_jo-ck/src/v8/src/array.js&l=1207) – pimvdb

उत्तर

6
यहाँ

है कैसे inArray jQuery में कार्यान्वित किया जाता करने के लिए बल इस के लिए एक अहस्ताक्षरित बदलाव है उनके कार्यान्वयन का उपयोग नहीं करते? :-)

सर्वश्रेष्ठ संबंध!

+1

सबसे संभावित कारण यह है कि उसका शिक्षक उसे अपने कोड के साथ आने की कोशिश कर रहा था। – kennebec

+1

@kennebec मैं अपना खुद का शिक्षक हूं (मैं स्वयं और शौक द्वारा पढ़ता हूं) – mithril333221

1

अभी के लिए, मैं छोरों के साथ कर रहा हूँ (लेकिन यह धीमी है और मुझे यकीन है कि वहाँ बेहतर तरीके हैं रहा हूँ)

कोई फर्क नहीं पड़ता कि आप क्या करते , यह डी के अंत में होगा ऐई लूप शामिल हैं। जब तक आप एक सरणी के अंदर खोज के लिए ओ (1) एल्गोरिदम का आविष्कार नहीं करते हैं। इसी तत्व को खोजने के लिए लूप का उपयोग करने में कुछ भी गलत नहीं है। आप अंतर्निहित सरणी ऑब्जेक्ट को इस विधि के साथ भी बढ़ा सकते हैं ताकि आप इसका पुन: उपयोग कर सकें।

2

MDN से:

if (!Array.prototype.indexOf) { 
    Array.prototype.indexOf = function (searchElement /*, fromIndex */) { 
     "use strict"; 
     if (this == null) { 
      throw new TypeError(); 
     } 
     var t = Object(this); 
     var len = t.length >>> 0; 
     if (len === 0) { 
      return -1; 
     } 
     var n = 0; 
     if (arguments.length > 0) { 
      n = Number(arguments[1]); 
      if (n != n) { // shortcut for verifying if it's NaN 
       n = 0; 
      } else if (n != 0 && n != Infinity && n != -Infinity) { 
       n = (n > 0 || -1) * Math.floor(Math.abs(n)); 
      } 
     } 
     if (n >= len) { 
      return -1; 
     } 
     var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); 
     for (; k < len; k++) { 
      if (k in t && t[k] === searchElement) { 
       return k; 
      } 
     } 
     return -1; 
    } 
} 

यह जाँच करता है अगर यह एक देशी कार्यान्वयन को देखता है, अगर यह लागू नहीं।

उल्लेखनीय क्वर्क्स:

function inArray(elem, array, i) { 
    var len; 
    if (array) { 
     if (array.indexOf) { 
      return array.indexOf.call(array, elem, i); 
     } 
     len = array.length; 
     i = i ? i < 0 ? Math.max(0, len + i) : i : 0; 
     for (; i < len; i++) { 
      // Skip accessing in sparse arrays 
      if (i in array && array[ i ] === elem) { 
       return i; 
      } 
     } 
    } 
    return -1; 
} 

आप उपयोग नहीं कर सकते jQuery लेकिन क्यों:

t.length >>> 0; एक सकारात्मक संख्या

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