Drukowana wersja tematu
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?
var object = { foo: 'bar', lorem: 'ipsum' }
Mam tylko coś takieg:
var firstElement = function( object ) {
for ( var key in proxyTouchList ) {
return proxyTouchList[ key ]
}
}
Ale coś mi podposiada że da się lepiej...
Napisany przez: b4rt3kk 6.10.2012, 10:12:02
http://www.php.net/reset($tablica);
http://www.php.net/echo http://www.php.net/current($tablica);
To JS, nie doczytałem, sorry.
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:
for (var element in object) {
var firstElement = object[element];
break;
}
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:
var firstElement = function( object ) {
for ( var key in object ) {
if ( 'function' !== typeof object[ key ] ) {
return object[ key ]
}
}
}
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
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:
- https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/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. - https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/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.
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)