Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Pierwszy element w tablicy asocjacyjnej (obiekcie)
Forum PHP.pl > Forum > Przedszkole
wNogachSpisz
Witam
Jak wyciągnąć pierwszy element w obiekcie nie znając nazwy klucza?

[JAVASCRIPT] pobierz, plaintext
  1. var object = { foo: 'bar', lorem: 'ipsum' }
[JAVASCRIPT] pobierz, plaintext


Mam tylko coś takieg:

[JAVASCRIPT] pobierz, plaintext
  1. var firstElement = function( object ) {
  2. for ( var key in proxyTouchList ) {
  3. return proxyTouchList[ key ]
  4. }
  5. }
[JAVASCRIPT] pobierz, plaintext


Ale coś mi podposiada że da się lepiej...
b4rt3kk
  1. reset($tablica);
  2. echo current($tablica);


To JS, nie doczytałem, sorry. smile.gif
kamil4u
To się robi za pomocą pętli, czy tak jak pokazałeś, ale warto dodać jeszcze warunek z hasOwnProperty, aby mieć pewność, że nie dostaniesz, żadnego śmiecia.
wNogachSpisz
Jak w tym przypadku prawidłowo użyć "hasOwnProperty" ?
kamil4u
Tak jak w dokumentacji:

W google: "hasOwnPropert mdc" -> https://developer.mozilla.org/en-US/docs/Ja.../hasOwnProperty na dole przykład z pętlą for in.

Z tym, że Ciebie nie obchodzi to co jest w else.
bostaf
Cytat(wNogachSpisz @ 6.10.2012, 10:43:36 ) *
Jak wyciągnąć pierwszy element w obiekcie nie znając nazwy klucza?

Pętlą for...in. Rozpocznij iterację, zapisz wartość do zmiennej i przerwij iterowanie:
[JAVASCRIPT] pobierz, plaintext
  1. for (var element in object) {
  2. var firstElement = object[element];
  3. break;
  4. }
[JAVASCRIPT] pobierz, plaintext

Pamiętaj, że właściwości obiektów nie są przechowywane w uporządkowanej kolejności i każda manipulacja właściwościami może potencjalnie zmienić ich kolejność. Kilka linijek kodu dalej, powyższa pętla może zwrócić inny wynik.
wNogachSpisz
Hm, a może lepiej:
[JAVASCRIPT] pobierz, plaintext
  1. var firstElement = function( object ) {
  2. for ( var key in object ) {
  3. if ( 'function' !== typeof object[ key ] ) {
  4. return object[ key ]
  5. }
  6. }
  7. }
[JAVASCRIPT] pobierz, plaintext

Bo jaki inny śmieć niz prototypiasta funkcja może się pojawić?

Cytat(bostaf @ 6.10.2012, 15:57:00 ) *
Pamiętaj, że właściwości obiektów nie są przechowywane w uporządkowanej kolejności i każda manipulacja właściwościami może potencjalnie zmienić ich kolejność. Kilka linijek kodu dalej, powyższa pętla może zwrócić inny wynik.

Luzik, chwilę wcześniej przeprowadzam sortowanie.
kamil4u
Nie jest lepiej. Użyj normalne hasOwnPropert.

Wystarczy, że w danych będziesz chciał kiedyś w przyszłości umieścić jakąś funkcję, to nie będziesz wiedział dlaczego to nie działa. Robi się to w sposób, który Ci napisałem to nie będziesz miał nigdy problemu z tą funkcją - nie wiem czemu się uparłeś, że chcesz inaczej smile.gif
wNogachSpisz
Nie uparłem, się, po prostu pytam.
Mylisz się, jeśi umieszcze funkcję, to nadal będzie działać prawidłowo..
Uzasadnij dlaczego tak nie jest lepiej.

//edit
Hmm, hasOwnProperty true jeżeli natrafi na funkcje..
kamil4u
Cytat
Mylisz się, jeśi umieszcze funkcję, to nadal będzie działać prawidłowo..

Nie. Nie mylę się:
Kod
<script>
var test1 = function( object ) {
for ( var key in object ) {
  if ( 'function' !== typeof object[ key ] ) {
   return object[ key ]
  }
}
}

var test2 = function( object ) {
for ( var key in object ) {
  if ( object.hasOwnProperty( key ) ) {
   return object[ key ]
  }
}
}

var obj = {
'funkcja': function(){ /*kod*/},
'string': 'ala ma kota'
}

alert( test1(obj) );
alert( test2(obj) );
</script>


Jak widać funkcja z hasOwnProperty zwraca pierwszy element, który jest funkcją. Generalnie w ogóle nie musiałbyś zmieniać swojej funkcji z pierwszego postu, ale na pewno takie zabezpieczenie się nie zaszkodzi, jak przypadkowo wrzucisz jakieś inne dane.
#luq
Zależy co robisz ale generalnie nie polegaj na kolejności elementów w obiekcie... Do tego jest tablica.
Przeczytaj http://frontend.pl/2010/03/kolejnosc-wlasc...ci-w-obiektach/
bostaf
Cytat(#luq @ 7.10.2012, 12:38:06 ) *
Zależy co robisz ale generalnie nie polegaj na kolejności elementów w obiekcie... Do tego jest tablica.
Przeczytaj http://frontend.pl/2010/03/kolejnosc-wlasc...ci-w-obiektach/

Fajny eksperyment. Potwierdza to co jest napisane w dokumentacji:
  • for...in#Description
    "A for...in loop iterates over the properties of an object in an arbitrary order" - pętla for...in iteruje w dowolnej kolejności.
  • delete#Cross-browser_issues
    "So if you want to simulate an ordered associative array in a cross-browser environment, you are forced to either use two separate arrays (one for the keys and the other for the values), or build an array of single-property objects, etc." - użyj tablic jeśli chcesz wymusić ustalony porządek.
!*!
http://phpjs.org/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.