Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript] Pierwszy element w tablicy asocjacyjnej (obiekcie)
wNogachSpisz
post 6.10.2012, 09:43:36
Post #1





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


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...
Go to the top of the page
+Quote Post
b4rt3kk
post 6.10.2012, 10:12:02
Post #2





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


  1. reset($tablica);
  2. echo current($tablica);


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

Ten post edytował b4rt3kk 6.10.2012, 10:13:18


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
kamil4u
post 6.10.2012, 11:58:52
Post #3





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
wNogachSpisz
post 6.10.2012, 14:27:44
Post #4





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Jak w tym przypadku prawidłowo użyć "hasOwnProperty" ?
Go to the top of the page
+Quote Post
kamil4u
post 6.10.2012, 14:42:04
Post #5





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


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.

Ten post edytował kamil4u 6.10.2012, 14:42:55


--------------------
Go to the top of the page
+Quote Post
bostaf
post 6.10.2012, 14:57:00
Post #6





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


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.

Ten post edytował bostaf 6.10.2012, 14:57:39
Go to the top of the page
+Quote Post
wNogachSpisz
post 6.10.2012, 15:38:06
Post #7





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


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.

Ten post edytował wNogachSpisz 6.10.2012, 15:38:47
Go to the top of the page
+Quote Post
kamil4u
post 6.10.2012, 15:54:04
Post #8





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
wNogachSpisz
post 6.10.2012, 16:50:32
Post #9





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


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

Ten post edytował wNogachSpisz 6.10.2012, 16:57:26
Go to the top of the page
+Quote Post
kamil4u
post 6.10.2012, 17:14:32
Post #10





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


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.

Ten post edytował kamil4u 6.10.2012, 17:15:10


--------------------
Go to the top of the page
+Quote Post
#luq
post 7.10.2012, 11:38:06
Post #11





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


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/


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
bostaf
post 7.10.2012, 11:58:57
Post #12





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
!*!
post 7.10.2012, 12:25:30
Post #13





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


http://phpjs.org/


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 10:24