Título lo resume.¿Alguna forma de hacer que jQuery.inArray() sea insensible?
Respuesta
Puede utilizar 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;
}
});
No. Tendrá que jugar con sus datos, generalmente hago todas mis cadenas en minúscula 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 que la comparación no sea sensible.
podría recorrer la matriz y ToLower cada elemento y ToLower lo que estás buscando, pero en ese punto en el tiempo, es posible que también acaba de compararlo en lugar de utilizar InArray()
Parece que debe implementar su propia solución para esto. Here es 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.
Gracias a @Drew Wills.
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;
}
Esto funcionó perfectamente para mí. – Alan
En estos días yo prefiero usar underscore para las tareas de la siguiente manera:
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
En caso de que alguien quería 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);
- 1. Cómo hacer que strpos sea insensible
- 2. ¿Cómo hacer que SELECCIONAR en PHP/MySQL sea insensible?
- 3. ¿Cómo hacer que esta regla .htaccess sea insensible?
- 4. ¿Una forma de hacer que md5_file() sea más rápido?
- 5. ¿Hay alguna forma de hacer que un bloque sea opcional en la plantilla de Django?
- 6. ¿Hay alguna manera fácil de hacer que ScrollViewer sea "hinchable"?
- 7. ¿Hay alguna manera de hacer que UserControl sea inafocable?
- 8. ¿Hay alguna forma de hacer que el código CSS3 entre navegadores sea SECO?
- 9. En Tkinter, ¿hay alguna forma de hacer que un widget no sea visible?
- 10. ¿Cómo hago que mi comparación de cadenas sea insensible?
- 11. ¿Cómo hago que la búsqueda de Xpath sea insensible?
- 12. ¿Cómo hacer que la identificación amigable no sea sensible?
- 13. Cómo hacer que la tarea sea deseable
- 14. ¿Hay alguna forma en que pueda hacer dos lecturas atómicas?
- 15. ¿Hay alguna manera de hacer que el simulador de iPad sea más grande?
- 16. ¿Puedo hacer que JUnit sea más detallado?
- 17. ¿Cómo hacer que Unix sea binario autónomo?
- 18. ¿Puedo hacer que un TTreeNode sea invisible?
- 19. ¿Existe alguna forma más rápida de copiar un archivo que no sea File.Copy
- 20. Hacer que una lista enlazada sea segura
- 21. ¿Hay alguna manera de hacer que un DIV no sea seleccionable?
- 22. ¿Hay alguna manera de hacer que el widget de texto Tkinter sea solo de lectura?
- 23. ¿Es posible hacer que Class.forName ("") sea flexible?
- 24. ¿qué puede hacer que pdb.set_trace() sea ignorado?
- 25. ¿Cómo hacer que el archivo sea escaso?
- 26. ¿Cómo hacer que odeint sea exitoso?
- 27. ¿Cómo hacer que el menú desplegable de Superfish sea receptivo?
- 28. Cómo hacer que mi código sea rápido
- 29. Cómo hacer que PictureBox sea desplazable
- 30. Cómo hacer que TimePicker sea más pequeño
Querrá agregar un "return false;" al final de esa declaración if para que 'cada' no continúe después de encontrar un elemento coincidente. (En jQuery.each() "return false;" es equivalente a "break;" en un bucle de JavaScript normal.) –
¿No es para LowLase en lugar de para Low? – Sarfraz
@Jordan y @Sarfraz: ambos puntos buenos –