2010-08-02 32 views

cevap

23

Sen each( kullanabilirsiniz) ...

// Iterate over an array of strings, select the first elements that 
// equalsIgnoreCase the 'matchString' value 
var matchString = "MATCHME".toLowerCase(); 
var rslt = null; 
$.each(['foo', 'bar', 'matchme'], function(index, value) { 
    if (rslt == null && value.toLowerCase() === matchString) { 
    rslt = index; 
    return false; 
    } 
}); 
+2

"Return false;" ifadesini eklemek istersiniz. bunun sonunda, eğer ifade eden bir eleman bulunduğundan, 'her' ifadesi devam etmez. (JQuery.each() "false döndürür;", normal bir JavaScript döngüsünde "break" e eşdeğerdir.) –

+3

toLowerCase toLower yerine değil mi? – Sarfraz

+0

@Jordan ve @Sarfraz: her iki iyi nokta –

1

Hayır. Verilerinizle uğraşmanız gerekecek, genellikle tüm dizelerimi kolay karşılaştırmalar için küçültüyorum. Ayrıca, karşılaştırma durumunu duyarsız hale getirmek için gerekli dönüşümleri yapacak özel bir karşılaştırma işlevi kullanma olasılığı da vardır.

1

dizi boyunca ve her eleman tolower ve aradığınızı tolower, ama zamanla bu noktada döngü, siz de sadece yerine inArray kullanmanın karşılaştırabilirsiniz olabilir()

1

Bunun için kendi çözümünüzü uygulamak zorunda kalabilirsiniz gibi görünüyor. Here, jQuery'ye özel işlevler ekleme hakkında iyi bir makaledir. Dönmek ve verileri normalleştirmek ve karşılaştırmak için özel bir işlev yazmanız gerekecektir.

4

@Drew Wills'e teşekkür ederiz. Böyle görevler için underscore kullanmayı tercih

function inArrayCaseInsensitive(needle, haystackArray){ 
    //Iterates over an array of items to return the index of the first item that matches the provided val ('needle') in a case-insensitive way. Returns -1 if no match found. 
    var defaultResult = -1; 
    var result = defaultResult; 
    $.each(haystackArray, function(index, value) { 
     if (result == defaultResult && value.toLowerCase() == needle.toLowerCase()) { 
      result = index; 
     } 
    }); 
    return result; 
} 
+1

Bu benim için mükemmel çalıştı. – Alan

1

Bu gün:

bu kadar yeniden yazdım

: vaka herkes kullanarak daha entegre bir yaklaşım istedi
a = ["Foo","Foo","Bar","Foo"]; 

var caseInsensitiveStringInArray = function(arr, val) { 
    return _.contains(_.map(arr,function(v){ 
     return v.toLowerCase(); 
    }) , val.toLowerCase()); 
} 

caseInsensitiveStringInArray(a, "BAR"); // true 
24

yılında

(function($){ 
    $.extend({ 
     // Case insensative $.inArray (http://api.jquery.com/jquery.inarray/) 
     // $.inArrayIn(value, array [, fromIndex]) 
     // value (type: String) 
     // The value to search for 
     // array (type: Array) 
     // An array through which to search. 
     // fromIndex (type: Number) 
     // The index of the array at which to begin the search. 
     // The default is 0, which will search the whole array. 
     inArrayIn: function(elem, arr, i){ 
      // not looking for a string anyways, use default method 
      if (typeof elem !== 'string'){ 
       return $.inArray.apply(this, arguments); 
      } 
      // confirm array is populated 
      if (arr){ 
       var len = arr.length; 
        i = i ? (i < 0 ? Math.max(0, len + i) : i) : 0; 
       elem = elem.toLowerCase(); 
       for (; i < len; i++){ 
        if (i in arr && arr[i].toLowerCase() == elem){ 
         return i; 
        } 
       } 
      } 
      // stick with inArray/indexOf and return -1 on no match 
      return -1; 
     } 
    }); 
})(jQuery); 
+1

+1 Çok yararlı ve seçilen cevap olmalıdır. –

+0

jQuery API'sine eklenmeli, her seferinde kopyalama-yapıştırma zor olacak, neyse – Bor

+0

Bu harika. Sadece son satırın başında sağ kaşlı ayracı gerekir. – EthR

İlgili konular