Esiste un determinato oggetto in cui il caso esatto delle proprietà non è noto in anticipo. Ad esempio, un nome di proprietà potrebbe essere "AbC" o "Abc" o "abc", ecc.Esiste un modo efficace per eseguire una ricerca del nome della proprietà dell'oggetto JavaScript senza distinzione tra maiuscole e minuscole?
Tuttavia, so che esiste solo uno. Cioè so che non ci può essere sia una proprietà "AbC" e anche una proprietà "abc".
Il nome della proprietà è sensibile al maiuscolo/minuscolo. Quindi se è archiviato come theObject.Abc e cerco theObject.abc non troverò la proprietà.
Nel mio oggetto potrebbero esserci 1000 proprietà di questo tipo.
Sarebbe, possibile, ma inefficiente, se ogni volta che volevo fare una ricerca ho confrontato il valore minuscolo della proprietà che voglio trovare contro il valore minuscolo dei nomi di proprietà, come questo:
propertyName = inputValue.toLowerCase();
for (var i in theObject) {
if (propertyName == i.toLowerCase()); // found a matching property name
}
Qualcuno conosce un modo più intelligente per farlo?
Per ragioni che richiederebbero troppo tempo per spiegare, non posso semplicemente ricreare l'oggetto e rendere tutte le proprietà minuscole. Mi rendo conto che se fosse possibile, potrei semplicemente trovare
theObject['inputValue'.toLowerCase()]
direttamente. Ma come ho detto, non posso. I nomi delle proprietà in theObject sono ciò che sono e non possono essere modificati. Chiedendomi perché sarebbe una grande digressione dal problema in questione. Per favore prendi la mia parola per questo che theObject è bloccato con i nomi delle proprietà che ha.
Qualcuno conosce un modo efficiente di eseguire una ricerca del nome di proprietà senza distinzione tra maiuscole e minuscole in una situazione come questa?
Si potrebbe probabilmente ottimizza l'istruzione if confrontando prima la lunghezza delle stringhe. Puoi anche memorizzare una mappa in cache se non cambiano. A parte questo, non la penso così. –
'propertyName = inputValue.toLowerCase(); if (Object.keys (theObject).map (function (v) {return v.toLowerCase();}). indexOf (propertyName)> - 1) {// .....} ' –
Questo usa regex e scorre attraverso le chiavi. http://stackoverflow.com/a/6223307/548568 – blessenm