开发者

Any way to make jQuery.inArray() case insensitive?

开发者_开发技巧Title sums it up.


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;
}


No. You will have to fiddle with your data, I usually make all my strings lowercase for easy comparisons. There is also the possibility of using a custom comparison function which would do the necessary transforms to make the comparison case insensitive.


could loop through the array and toLower each element and toLower what you're looking for, but at that point in time, you may as well just compare it instead of using inArray()


These days I prefer to use underscore for tasks like this:

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


It looks like you may have to implement your own solution to this. Here is a good article on adding custom functions to jQuery. You will just need to write a custom function to loop and normalize the the data then compare.


This way worked for me..

var sColumnName = "Some case sensitive Text"

if ($.inArray(sColumnName.toUpperCase(), getFixedDeTasksColumns().map((e) => 
e.toUpperCase())) == -1) {// do something}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜