Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [JavaScript] Pierwszy element w tablicy asocjacyjnej (obiekcie)

Napisany przez: wNogachSpisz 6.10.2012, 09:43:36

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...

Napisany przez: b4rt3kk 6.10.2012, 10:12:02

  1. http://www.php.net/reset($tablica);
  2. http://www.php.net/echo http://www.php.net/current($tablica);


To JS, nie doczytałem, sorry. smile.gif

Napisany przez: kamil4u 6.10.2012, 11:58:52

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.

Napisany przez: wNogachSpisz 6.10.2012, 14:27:44

Jak w tym przypadku prawidłowo użyć "hasOwnProperty" ?

Napisany przez: kamil4u 6.10.2012, 14:42:04

Tak jak w dokumentacji:

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

Z tym, że Ciebie nie obchodzi to co jest w else.

Napisany przez: bostaf 6.10.2012, 14:57:00

Cytat(wNogachSpisz @ 6.10.2012, 10:43:36 ) *
Jak wyciągnąć pierwszy element w obiekcie nie znając nazwy klucza?

Pętlą https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/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.

Napisany przez: wNogachSpisz 6.10.2012, 15:38:06

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.

Napisany przez: kamil4u 6.10.2012, 15:54:04

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

Napisany przez: wNogachSpisz 6.10.2012, 16:50:32

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..

Napisany przez: kamil4u 6.10.2012, 17:14:32

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.

Napisany przez: #luq 7.10.2012, 11: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-wlasciwosci-w-obiektach/

Napisany przez: bostaf 7.10.2012, 11:58:57

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-wlasciwosci-w-obiektach/

Fajny eksperyment. Potwierdza to co jest napisane w dokumentacji:

Napisany przez: !*! 7.10.2012, 12:25:30

http://phpjs.org/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)