Czy istnieje elegancki sposób na uzyskanie dostępu do pierwszej właściwości obiektu ...
- gdzie nie znasz nazwy swoich nieruchomości
- bez użycia pętli jak
for .. in
lub jQuery$.each
Na przykład muszę uzyskać dostęp do foo1
obiektu bez znajomości nazwy foo1:
var example = {
foo1: { /* stuff1 */},
foo2: { /* stuff2 */},
foo3: { /* stuff3 */}
};
javascript
object
atogle
źródło
źródło
Odpowiedzi:
Za pomocą tego można uzyskać dostęp do innych właściwości według indeksów. Bądź tego świadomy!
Object.keys
zamówienie zwrotu nie jest gwarantowane zgodnie z ECMAScript, jednak nieoficjalnie dzieje się tak we wszystkich głównych implementacjach przeglądarek. Szczegółowe informacje na ten temat można znaleźć na stronie https://stackoverflow.com/a/23202095 .źródło
first()
lub coś podobnego mogłoby to poradzić.Wypróbuj
for … in
pętlę i przerwij po pierwszej iteracji:źródło
Możesz też zrobić
Object.values(example)[0]
.źródło
Object.keys
, ponieważ masz gwarancję otrzymania pierwszego przedmiotu.Użyj,
Object.keys
aby uzyskać tablicę właściwości obiektu. Przykład:Dokumentacja i podkładka między przeglądarkami tutaj . Przykład jego użycia można znaleźć w innej z moich odpowiedzi tutaj .
Edycja : dla jasności chcę tylko powtórzyć to, co zostało poprawnie stwierdzone w innych odpowiedziach: kolejność klawiszy w obiektach javascript jest niezdefiniowana.
źródło
Wersja z jedną zasadą:
źródło
for in
bez sprawdzania może być ryzykowne,hasOwnProperty
ponieważ obiekt zawiera inne niechciane wartości dołączane do niego programowo, dzięki czemu można uzyskać niechciany wynik z tego fragmentu kodu. Tylko dlatego, że jest krótki i schludny, nie oznacza, że jest bezpieczny.Nie ma „pierwszej” właściwości. Klucze obiektowe są nieuporządkowane.
Jeśli je
(var foo in bar)
zapętlisz, dostaniesz je w określonej kolejności, ale może się to zmienić w przyszłości (zwłaszcza jeśli dodasz lub usuniesz inne klucze).źródło
Rozwiązanie z biblioteką lodash :
ale nie ma gwarancji kolejności obiektów w pamięci wewnętrznej, ponieważ zależy to od implementacji maszyny Wirtualnej javascript.
źródło
var object = { childIndex: { .. } }; var childObject = _.find(Object);
Nie. Literał obiektowy, zgodnie z definicją MDC, to:
Dlatego dosłowny obiekt nie jest tablicą i można uzyskać dostęp do właściwości tylko za pomocą ich jawnej nazwy lub
for
pętli za pomocąin
słowa kluczowego.źródło
Najlepsza odpowiedź może wygenerować całą tablicę, a następnie przechwycić z listy. Oto kolejny skuteczny skrót
źródło
Zostało to tutaj omówione wcześniej.
Pojęcie pierwszego nie dotyczy właściwości obiektu, a specyfikacja nie gwarantuje kolejności pętli for ... in, jednak w praktyce jest to niezawodnie FIFO, z wyjątkiem krytycznie dla chrome ( raport o błędach ). Podejmij odpowiednie decyzje.
źródło
Nie polecam używać Object.keys, ponieważ nie jest obsługiwany w starych wersjach IE. Ale jeśli naprawdę tego potrzebujesz, możesz użyć powyższego kodu, aby zagwarantować kompatybilność wsteczną:
Funkcja Firefox (Gecko) 4 (2.0) Chrome 5 Internet Explorer 9 Opera 12 Safari 5
Więcej informacji: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/keys
Ale jeśli potrzebujesz tylko pierwszego, możemy zaproponować krótsze rozwiązanie, takie jak:
źródło
Aby uzyskać pierwszą nazwę klucza w obiekcie, możesz użyć:
Zwraca ciąg znaków, więc nie można uzyskać dostępu do zagnieżdżonych obiektów, jeśli takie istnieją:
var obj = { first: { someVal : { id : 1} };
W tym rozwiązaniu nie można uzyskać dostępu do identyfikatora.Najlepszym rozwiązaniem, jeśli chcesz uzyskać rzeczywisty obiekt, jest lodash:
Aby zwrócić wartość pierwszego klucza (jeśli nie znasz dokładnie nazwy pierwszego klucza):
jeśli znasz nazwę klucza, użyj:
lub
źródło
Jeśli potrzebujesz uzyskać dostęp do „pierwszej właściwości obiektu”, może to oznaczać, że coś jest nie tak z twoją logiką. Kolejność właściwości obiektu nie powinna mieć znaczenia.
źródło
Użyj tablicy zamiast obiektu (nawiasy kwadratowe).
Pamiętaj, że tracisz identyfikatory „foo”. Ale możesz dodać właściwość name do zawartych obiektów:
źródło
Czy jest jakiś powód, aby tego nie robić?
źródło
.map()
istnieje tylko dla wbudowanych iteratorówMożesz użyć,
Object.prototype.keys
który zwraca wszystkie klucze obiektu w tej samej kolejności. Więc jeśli chcesz pierwszy obiekt, po prostu weź tę tablicę i użyj pierwszego elementu jako pożądanego klucza.źródło
możemy również zrobić z tym approch.
źródło
Oto czystszy sposób na zdobycie pierwszego klucza:
źródło
[first]
. Użytkownik nie poprosił o tablicę jako odpowiedź. Po co to robić,first = Object.keys(example)[0]
co zrobi to samo bez konieczności zawijania odpowiedzi w tablicy. Dlaczego proszę o czystsze?