Forum Gry Hobby Sprzęt Rozmawiamy Archiwum Regulamin

Forum: Zagwozdka z JavaScript

26.09.2015 18:14
1
zanonimizowany602264
153
Legend

Zagwozdka z JavaScript

Witam. Ostatnio w pewnym wątku, ktoś polecał pewien kurs (nie będę mówił jaki, bo jeszcze o reklamę mnie posądzicie). Zadaniem było napisanie programu, który w łańcuchu (chyba tak to się po polsku pisze :P) wyszukuje wyraz z daną pierwszą literą, po czym wprowadza te litery do macierzy i potem je wyświetla. Wstawiam poniżej kod:

spoiler start


var text = "Dawid lubi jeść zupę. Dawid \
lubi jeździć samochodem. Dawid lubi \
robić burrito. Dawid rządzi, każdy to wie. \
Dawid lubi Diablo 3.";
var myName = "Dawid";
var hits = [];
for (var i=0; i < text.length; i++)‹;
if (text === 'D')‹;
for (var j=i; j<i+myName.length; j++)‹;
hits.push(text[j]);›;
›;
›;
if(hits.length===0)‹;
console.log("Your name wasn't found!");›;
else‹;
console.log(hits);›;

spoiler stop

Rodzi się tutaj pytanie. Co oznacza text[ i ] oraz text[ j ]? Mam nadzieję, że mnie ktoś poratuje odpowiedzią... :P

Edit: Drugie pytanie, dlaczego w drugiej pętli mamy j<i+myName.length, a nie j<myName.length. Wybaczcie, te może noobskie pytania, ale chcę rozwiać wątpliwości.

26.09.2015 19:13
Sanchin
2
odpowiedz
Sanchin
208
Orchid Samurai

Nie widzę w kodzie text, strzelam że jest w pierwszym "if" - przy porównaniu. Bo inaczej zadanie nie ma sensu.
Tekst to tablica znaków, więc daje się dobrać do poszczególnych liter po kolei - litera na i-tym i j-tym miejscu, zaczynając od 0.

W drugiej pętli mamy i+myName.length bo zacznyamy od j=i - w przeciwnym przypadku nie wykonała by się pętla dla kolejnych wystąpień imienia poza pierwszym - albo w ogóle, jeśli tekst zaczynałby się od czegoś innego. Bierzemy myName.lenght znaków od pozycji j=i, więc dla i=10, jeśli chcemy 5 znaków, musimy się zatrzymać na j<15 a nie 5 - wtedy wyszła by pętla for (j=10; j<5; j++) - czyli nigdy by się nie wykonała.

26.09.2015 22:38
3
odpowiedz
zanonimizowany602264
153
Legend

Hmm. A to text to nie jest to?

var text = "Dawid lubi jeść zupę. Dawid \
lubi jeździć samochodem. Dawid lubi \
robić burrito. Dawid rządzi, każdy to wie. \
Dawid lubi Diablo 3.";

Druga sprawa wyjaśniona, a co z tym textem? :v

26.09.2015 22:43
4
odpowiedz
b212
134
Generał

Wrzuć kod na jsfiddle, bo w obecnej formie nie da się go czytać / używać :)

26.09.2015 22:52
5
odpowiedz
zanonimizowany602264
153
Legend
Image

Kod piszę na stronie codecademy.com. Nie mam zielonego pojęcia, czy coś jest jeszcze dodawane, aby wyświetlić wyniki. Tam wygląda to tak ->>>

Natomiast na jsfiddle kod nie działa.
https://jsfiddle.net/m7L2bb3v/
Co muszę zmienić? Nie bijcie za błędy, piszę w javascripcie dopiero 3 dzień. :P

26.09.2015 22:52
kaczmen
6
odpowiedz
kaczmen
98
GINOBILI!!!

stringi w js działają trochę jak tablice, text oznacza literę o numerze "i" w stringu (zaczynamy od 0)
np "Dawid"[2] === "w"

w tym kodzie jedno rzuca mi się od razu - nigdy nie znajdziesz text === "D"
w tej pętli musisz szukać text ==="D"

26.09.2015 23:08
7
odpowiedz
zanonimizowany602264
153
Legend

w tym kodzie jedno rzuca mi się od razu - nigdy nie znajdziesz text === "D"
w tej pętli musisz szukać text ==="D"
Nie bardzo rozumiem.

Kod powinien w tekście szukać litery "D". Jeśli ją znajdzie musi wpisać ją do macierzy wraz z czterema pozostałymi znakami, ponieważ zmienna myName posiada pięć znaków. Także znakami, jakie będą wprowadzone do macierzy będą te które tworzą - 5x "Dawid i raz "Diabl" (pięć znaków). Następnie, jeśli macierz jest pusta, wyświetlone zostanie "Your name wasn't found!". W innym wypadku zawartość macierzy.

26.09.2015 23:11
Sanchin
8
odpowiedz
Sanchin
208
Orchid Samurai

A, to GOL wycina nawiasy kwadratowe - tami miało być, że nie widzę text[ i ] a nie text. Czyli pewnie w 1 poście tak samo wcięło jak i u mnie oraz kaczmen. Reszta tak jak pisałem ja oraz inni - tekst to tablica znaków, przez nawiasy kwadratowe odwołujesz się m.in. do indeksu w tablicy.

26.09.2015 23:18
kaczmen
9
odpowiedz
kaczmen
98
GINOBILI!!!

no właśnie zjada

jeżeli ma zbudować tablicę z każdą literą "D" + 4 następne znaki, to zamiast pętli "for" możesz dać po prostu hits.push(text.substr(i, myName.length))

na jsfiddle nie ma opcji pokazania konsoli?

26.09.2015 23:26
10
odpowiedz
zanonimizowany602264
153
Legend

Kurde wybaczcie, nie miałem pojęcia, że zje te nawiasy.

Sanchin, co do tego text[ i ] to zmyliły mnie nawiasy kwadratowe. Odwołuję się do stringa, a nie array w którym one właśnie są. Stąd ten kłopot.

kaczmen no jest okienko Results, ale niestety nie pokazuje działania kodu. Coś powinienem dodać?

26.09.2015 23:35
kaczmen
11
odpowiedz
kaczmen
98
GINOBILI!!!

console.log loguje do konsoli, wciśnij sobie f12 (chrome/firefox) i zobacz część "console", to tam pojawiają się te dane

ewentualnie http://jsbin.com/guwudiguve/1/edit?html,js,console,output

26.09.2015 23:39
12
odpowiedz
zanonimizowany602264
153
Legend

Ogromne dzięki za pomoc panowie. :) Uratowaliście mi głowę, inaczej noc byłaby trudna. :P

26.09.2015 23:57
kaczmen
13
odpowiedz
kaczmen
98
GINOBILI!!!

gdybyś nie miał używać funkcji substr i musiał użyć for to - http://jsbin.com/quqifipogu/1/edit?html,js,console,output

+ sprawdzenie, czy ostatnie D ma za sobą 4 znaki

Forum: Zagwozdka z JavaScript