• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Javascript Tablice

Object Storage Arubacloud
0 głosów
181 wizyt
pytanie zadane 12 marca 2019 w JavaScript przez KubeUsz Nowicjusz (140 p.)

Witam. 

Mam problem ze stworzeniem skryptu który ma polegać na tym, że zmienna to długość tablicy, a obiekty w tablicy to kolejno 1,2,3,4... .

Długość tablicy udało mi się zrobić lecz nie wiem jak wprowadzić kolejne liczby do tablicy. Kod:

var n = 3;
const tab = new Array(n);
for(var x=0;x>=tab.length;x++){
tab[x]
}

document.write("tablica: "+tab);

 

I otrzymuje tylko napis tablica: ,, 

Wie ktoś może gdzie jest błąd w kodzie?

komentarz 12 marca 2019 przez Tomek Sochacki Ekspert (227,510 p.)

Mam problem ze stworzeniem skryptu który ma polegać na tym, że zmienna to długość tablicy

to powiedz osobie, która dała takie zadanie, że chyba nigdy w życiu nie napisała ani jednej linijki kodu w JS... tutaj nie ma czegoś takiego jak tablica o zadanej długości, to nie Java :)

Zapis Array(5) w żaden sposób nie tworzy tablicy na 5 elementów. Jeśli już by chcieć rozpatrywać takie twory to lepiej użyć Array.from({length: 5}) ale to i tak nie jest tablica o zatrzaśniętej długości na 5 elementów.

komentarz 12 marca 2019 przez ScriptyChris Mędrzec (190,190 p.)
var array = Object.seal(Array.from({ length: 5 }));

Taka tablica już trzyma length. :)

Chociaż dziwna rzecz dzieje się przy korzystaniu z shift():

for (var i = 0; i < array.length; i++) {
	array[i] = i * 1.5;
}

array // (5) [0, 1.5, 3, 4.5, 6]
array.shift() // TypeError
array // (5) [1.5, 3, 4.5, 6, 6] <-- 0 usunięte, ale dwie szóstki na końcu

 

komentarz 12 marca 2019 przez Tomek Sochacki Ekspert (227,510 p.)
Nie, metoda ta tylko ustawia deskryptor configurable na false dla wszystkich właściwości, m.in. dla length i nie pozwala na dodanie nowych właściwości. Jednakże nie ma to nic wspólnego z tablicą o konkretnie definiowanej długości jak np. w Javie. W ogóle to tablica w JS to po prostu obiekt, tu nie ma określonego typu jak w innych językach. A po za tym to dzisiaj w wielu przypadkach odchodzi się od takiego myślenia o tablicach, np. w Javie chyba częściej stosuje się inne typy jak ArrayList itp. pozwalające na pewną dynamikę w zakresie wielkości tablicy. No chyba, że mamy np. jakieś duże zbiory i priorytetem jest wydajność ale takie rzeczy to raczej nie są pisane w JS.
komentarz 12 marca 2019 przez ScriptyChris Mędrzec (190,190 p.)

Wiem, że ten przykład jest trochę z czapy i tak stworzona tablica ma mało sensu, choćby ze względu na rzucanie błędów w trakcie używania metod wpływających na jej property length. Niemniej, jeśli nie można zwiększyć ani zmniejszyć liczby elementów takiej tablicy (można natomiast zmieniać ich wartość), to jej długość w pewnym sensie jest stała - i to miałem na myśli.

komentarz 12 marca 2019 przez Tomek Sochacki Ekspert (227,510 p.)

Nie no w takim sensie to spoko, ale nie chciałbym tego spotkać w kodzie produkcyjnym... :) zresztą mojej CRki to byś tym Panie nie przeszedł :D

a tak na serio, to:

jeśli nie można zwiększyć ani zmniejszyć liczby elementów takiej tablicy

to zastanowiłbym się w czym dokładnie leży problem i czy na pewno wszystko jest ok logicznie, a jesli tak, to warto zastanowić się kto i po co miałby modyfikować liczbę elementów... bo może problemu trzeba poszukać gdzieś indziej.

Już wiele razy sam wpadłem w pułapkę, gdzie robiłem jakieś błędy w założeniach i nie rzadko odejście na chwilę od projektu, wejście w innego taska i powrót za dzień czy dwa powodował olśnienie i czasami drastyczny refaktor :) Dlatego też tak dobre są wg mnie PR z CR, choć niektórzy potrafią się nawet obrażać za uwagi w CR :)

1 odpowiedź

0 głosów
odpowiedź 12 marca 2019 przez Snejki Stary wyjadacz (14,520 p.)

Rozważmy następującą pętlę for: for(A;B;C). Pętla ta jest wykonywana tylko wtedy gdy warunek B jest prawdziwy. W twojej pętli warunek ten niespełniony gdyż x jest mniejszy niż długość tablicy. Po za tym do komórki w tablicy nie przypisujesz żadnej wartości.  Wartość możesz przypisać np. w natępujący sposób: 

tab[x] = x;

 

komentarz 12 marca 2019 przez KubeUsz Nowicjusz (140 p.)

To z pętlą to właśnie przed chwilą zauważyłem 'literówke'. A tab[x] = x; Zadziałało.

Dziękuje bardzo :D

Działający kod:

var n = 3;
const tab = new Array(n);
for(var x=0;x<=n;x++){
 tab[x] = x
}
 document.write(tab)

 

Podobne pytania

0 głosów
1 odpowiedź 1,980 wizyt
pytanie zadane 10 września 2019 w JavaScript przez 42savage Bywalec (2,630 p.)
0 głosów
1 odpowiedź 726 wizyt
pytanie zadane 27 listopada 2018 w Java przez mn130496 Gaduła (3,530 p.)
0 głosów
1 odpowiedź 130 wizyt
pytanie zadane 14 września 2016 w PHP przez GaCeL Dyskutant (7,500 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...