w3schools objects inarray elementos array agregar jquery arrays

objects - jquery grep



¿Hay alguna forma de hacer que jQuery.inArray() sea insensible? (7)

En caso de que alguien quisiera un enfoque más integrado usando 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);

Título lo resume.


Estos días prefiero usar el underscore para tareas como esta:

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


Gracias a @Drew Wills.

Lo reescribí como esto:

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. Tendrás que jugar con tus datos, normalmente hago todas mis cadenas en minúsculas para facilitar las comparaciones. También existe la posibilidad de utilizar una función de comparación personalizada que haría las transformaciones necesarias para hacer que la comparación sea insensible.


Parece que debe implementar su propia solución para esto. Here hay un buen artículo sobre cómo agregar funciones personalizadas a jQuery. Solo necesitará escribir una función personalizada para repetir y normalizar los datos y luego compararlos.


Puedes usar 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; } });


podría recorrer el conjunto y bajar cada elemento y disminuir lo que está buscando, pero en ese momento, también puede compararlo en lugar de usar InArray ()