Any Way To Make JQuery.inArray() Case Insensitive?
Answer :
In case anyone wanted a more integrated approach using jquery:
(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);
You can use 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; } });
Thank you to @Drew Wills.
I rewrote it as this:
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; }
Comments
Post a Comment