2010-08-02 44 views

回答

23

您可以使用each( )...

// 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

您將要添加一個「返回false」;在if語句的末尾,因此在找到匹配元素後,'each'不會繼續。 (在jQuery.each()中,「return false;」與普通JavaScript循環中的「break;」等價。) – 2010-08-02 19:15:30

+3

難道不是爲了低級別而是低級? – Sarfraz 2010-08-02 19:15:31

+0

@Jordan和@Sarfraz:兩個好點 – 2010-08-02 19:28:11

1

不需要。您將不得不擺弄您的數據,我通常會將所有字符串都設爲小寫字母以便於比較。還有可能使用自定義比較函數來進行必要的轉換以使比較不區分大小寫。

1

可以遍歷數組和tolower每個元素和TOLOWER你要找的東西,但在那個時候,你可能也只是進行比較,而不是使用inArray()

1

看起來你可能不得不實施你自己的解決方案。 Here是向jQuery添加自定義函數的好文章。你只需要編寫一個自定義函數來循環和標準化數據,然後進行比較。

4

感謝@Drew Wills。

我重寫了它,因爲這:

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

這對我來說非常合適。 – Alan 2014-04-15 21:12:11

1

這些天,我更喜歡使用underscore的任務是這樣的:

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

如果有人想利用一個更加綜合的方法:

(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非常有用,應該是選定的答案。 – 2013-08-02 07:35:41

+0

這應該被添加到jQuery API中,每次複製粘貼它都會很困難,無論如何都很好 – Bor 2013-12-13 10:15:42

+0

這太棒了。在最後一行的開頭只需要一個右大括號。 – EthR 2013-12-13 14:46:44