Dziś krótka notka o tym, co ‚odkryłem’ dziś w pracy. Musiałem odnaleźć sposób na Wywoływanie właściwości obiektu kluczem znajdującym się w tablicy. O co chodzi? Już tłumacze.
Pisząc kod do jakiegoś tam rozwiązania miałem taką oto sytuację: Pewien skrypt zwracał mi tablicę, z informacją na temat pewnego bytu. Nie wiedziałem, jaka będzie treść tej tablicy, wiedziałem jednak jakie informacje będą w tej tablicy występować i w jakiej kolejność. Przykład:
1 |
dogData = ["Maja", 8, 4]; |
takie coś otrzymywałem, nie wiedziałem jak będą wyglądać dane, wiedziałem tylko, że dogData[0] to imię psa, dogData[1] to wiek a dogData[2] to ilość łap.
Tak otrzymane dane musiałem przekazać do obiektu:
1 |
var dogObject = {}; |
Następnie obiekt ten był przekazywany dalej i działy się z nim różne rzeczy niestworzone.
Na pierwszy rzut oka, żaden problem. Szybki kod.
1 2 3 |
dogObject.name = dogData[0]; dogObject.age = dogData[1]; dogObject.paws = dogData[2]; |
Jednak do obiektu dogObject, miałem dodać jeszcze jedno pole. Zawierać ono miało imię właściciela psa. Zestaw psów przypisanych do imoin właścicieli otrzymywałem w innym obiekcie
1 2 3 4 5 6 |
var dogOwners = { Maja : "Joanna", Burek : "Andrzej", Rambo : "Mietek", Miluś : "Krzysztof" } |
Pierwsze moje podejście wyglądało tak
1 2 |
//zły przykład... dogObject.owner = dogOwners.dogData[0] |
Zanim to odpaliłem, wiedziałem że nie zadziała. Tablica zawierała łańcuch znaków, a to nie przejdzie w notacji z kropką. I nie przeszło 🙁 Miałem klucz w tablicy, ale nie wiedziałem jak go wykorzystać.
Ostatecznie, przypomniało mi się, że wartości w obiektach możemy wywoływać też notacją nawiasów kwadratowych czyli.
1 |
dogOwners.Maja |
zwróci nam to samo co
1 |
dogOwners["Maja"] |
Sprawdziłem czy uda się to w moim przypadku, czyli przy przekazywaniu
1 |
dogObject.owner = dogOwners[dogData[0]]; |
Zadziałało! Każdego dnia uczymy się czegoś nowego 🙂