Jest pewien obiekt, który mam, gdzie dokładny przypadek właściwości nie jest znany z wyprzedzeniem. Na przykład nazwą właściwości może być "AbC" lub "Abc" lub "abc", itp.Czy istnieje skuteczny sposób sprawdzania nazw obiektów JavaScript niewrażliwych na wielkość liter?
Ale wiem, że tylko jeden istnieje. To jest Wiem, że nie może być zarówno właściwość "AbC", a także właściwość "abc".
W nazwie właściwości jest rozróżniana wielkość liter. Więc jeśli jest przechowywany jako theObject.Abc i szukam theObject.abc, nie znajdę tej właściwości.
W moim obiekcie może być 1000 takich nieruchomości.
Byłoby to możliwe, ale nieefektywne, jeśli za każdym razem, gdy chciałbym wykonać odnośnik, porównałem małą wartość właściwości, którą chcę znaleźć z małymi literami nazw właściwości, jak poniżej:
propertyName = inputValue.toLowerCase();
for (var i in theObject) {
if (propertyName == i.toLowerCase()); // found a matching property name
}
Czy ktoś ma na to sprytniejszy sposób?
Z przyczyn, których wyjaśnienie zajmie zbyt dużo czasu, nie mogę po prostu odtworzyć obiektu i zmienić jego właściwości na małe litery. Zdaję sobie sprawę, czy było to możliwe, że mogłem po prostu bezpośrednio znaleźć:
theObject['inputValue'.toLowerCase()]
Ale jak powiedziałem, nie mogę. Nazwy właściwości w theObject są tym, czym są i nie można ich zmienić. Pytając mnie, dlaczego byłaby ogromna dygresja od problemu. Proszę mi wierzyć, że theObject utknął z nazwami właściwości, które ma.
Czy ktoś zna skuteczny sposób sprawdzania nazw właściwości w zależności od wielkości liter w takiej sytuacji?
Mogłabyś prawdopodobnie zoptymalizuje instrukcję if, porównując najpierw długość łańcuchów. Możesz także buforować mapę, jeśli się nie zmienia. Poza tym nie sądzę. –
'propertyName = inputValue.toLowerCase(); if (Object.keys (theobject).map (function (v) {return v.toLowerCase();}). indexOf (propertyName)> - 1) {// .....} ' –
Używa regex i pętli za pomocą klawiszy. http://stackoverflow.com/a/6223307/548568 – blessenm