Titel fasst es zusammen.Gibt es eine Möglichkeit, jQuery.inArray() case-insensitiv zu machen?
Antwort
können Sie each( verwenden) ...
// 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;
}
});
Nein. Sie müssen mit Ihren Daten geizen, ich mache normalerweise alle meine Zeichenfolgen Kleinbuchstaben für einfache Vergleiche. Es besteht auch die Möglichkeit, eine benutzerdefinierte Vergleichsfunktion zu verwenden, die die erforderlichen Transformationen durchführt, um den Vergleich in Bezug auf die Groß- und Kleinschreibung unempfindlich zu machen.
könnte Schleife durch das Array und toLower jedes Element und toLower, was Sie suchen, aber zu diesem Zeitpunkt können Sie auch nur um es zu vergleichen, anstatt InArray der Verwendung()
Es sieht so aus, als müssten Sie möglicherweise Ihre eigene Lösung implementieren. Here ist ein guter Artikel zum Hinzufügen von benutzerdefinierten Funktionen zu jQuery. Sie müssen nur eine benutzerdefinierte Funktion schreiben, um die Daten zu loopen und zu normalisieren und dann zu vergleichen.
Vielen Dank an @Drew Wills.
Ich schrieb es als dies:
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;
}
Das hat perfekt für mich funktioniert. – Alan
In diesen Tagen ziehe ich underscore für Aufgaben wie diese verwenden:
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
Falls jemand einen stärker integrierten Ansatz jquery wollte:
(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. Gibt es eine Möglichkeit, eine lokale Niederlassung unveränderlich zu machen?
- 2. Gibt es eine Möglichkeit, die C# -Bindung statisch zu machen?
- 3. Gibt es eine Möglichkeit, Rails ActiveRecord Attribute privat zu machen?
- 4. gibt es eine Möglichkeit, diesen Code kürzer zu machen?
- 5. Gibt es eine Möglichkeit, jQuery-Ausgabe * tatsächliches Markup * zu machen?
- 6. Gibt es eine Möglichkeit, Sellerie/RabbitMQ persistent zu machen?
- 7. Gibt es eine Möglichkeit, SIFR-Schriftart als Schriftart zu machen?
- 8. Gibt es eine Möglichkeit, den `enum` -Typ vorzeichenlos zu machen?
- 9. Gibt es eine Möglichkeit, TFS linkbar zu machen?
- 10. Gibt es eine Möglichkeit in C curry zu machen?
- 11. Gibt es eine bessere Möglichkeit, diesen Python-Code zu machen?
- 12. Gibt es eine Möglichkeit, ein zugängliches Modal zu machen?
- 13. Gibt es eine Möglichkeit, ein UserControl unkenntlich zu machen?
- 14. Gibt es eine Möglichkeit, dieses JQuery-Karussell effizienter zu machen?
- 15. Gibt es eine Möglichkeit, JNLP ohne Zertifikate zu machen?
- 16. Gibt es eine Möglichkeit, den iPad-Simulator größer zu machen?
- 17. Gibt es eine Möglichkeit, ein HTML-Element schlank zu machen?
- 18. Gibt es eine Möglichkeit ein <select> gehen machen
- 19. Gibt es eine Möglichkeit, AMDPlugin zu deaktivieren?
- 20. Gibt es eine Möglichkeit, django.db.connection.queries zu löschen?
- 21. Gibt es eine Möglichkeit, Fenstereigenschaften zu verbergen?
- 22. Gibt es eine Möglichkeit, Mehrfacheinspritzung zu propagieren?
- 23. Gibt es eine Möglichkeit, onPanResponderMove zu verwalten?
- 24. Gibt es eine Möglichkeit, PreparedStatement zu aktualisieren?
- 25. Gibt es eine Möglichkeit, Datenbanktransaktionen zu beschleunigen?
- 26. Gibt es eine Möglichkeit, ConfigurationManager.AppSettings zu überschreiben?
- 27. Gibt es eine Möglichkeit, Kovarianz zu deklarieren?
- 28. Gibt es eine Möglichkeit, Unterabfragen zu vermeiden?
- 29. Gibt es eine Möglichkeit, Webkonsolenfehler zu erkennen?
- 30. Gibt es eine Möglichkeit, dies zu loopen?
Sie wollen eine "Rückkehr false;" Am Ende dieser if-Anweisung wird also das "each" nicht fortgesetzt, nachdem ein übereinstimmendes Element gefunden wurde. (In jQuery.each() "return false;" entspricht "break;" in einer normalen JavaScript-Schleife.) –
Ist es nicht zuLowerCase und nicht zuLower? – Sarfraz
@ Jordan und @Sarfraz: beide gute Punkte –