Nu inteleg problema acestui execitiu in JS

Salut! In primul rand as dori sa va spun ca ma bucur maxim ca am descoperit acest forum si sper ca ma adresez corect in sectiunea asta. Daca nu indeplinesc regulamentul, va rog sa imi spuneti unde si cum sa mi va adresez.

Sunt incepator si urmez cursuri online de pe UDEMY, iar unul dintre exercitii imi da o bataie de cap enorma. Nu inteleg din codul urmator:

const mystery = ‘"’; //CHANGE THIS VALUE TO MAKE THE CONDITIONAL BELOW TRUE

if (mystery[0] === ‘P’ && mystery.length > 5 && mystery.indexOf(‘7’) !== -1){
console.log(“YOU GOT IT!!!”);

Ce inteleg in mare este ca:

  1. String-ul meu trebuie sa inceapa cu litera P;
  2. String-ul meu trebuie sa fie mai mare de 5 litere, deci sa aibe minim 6 litere incluse;

Nu inteleg:

mystery.indexOf(‘7’) !== -1

Inteleg din el faptul ca:
Trebuie sa contina cifra 7 in el, dar nu inteleg logica din spate. Ati putea va rog sa ma ajutati explicandu-mi-o? Va multumesc maxim!

Ce am constatat eu:
indexOf-ul fara functia nu este egal (!==) ar rezulta -1 by default (vreau sa stiu de ce totusi, eu doar am verificat in consola), iar functia nu este egal ii da deny, noi setand deja ca ea fiind 7. Daca am face abstractie de “!== -1”, atunci “7” nu ar mai fi obligatoriu prezent in string-ul “mystery”.

1 Like
  1. Ce este mystery ? → Un array (string mai exact daca nu e declarat ca si [‘a’,‘b’,‘c’])
  2. Ce fac functiile (mai bine zis metodele daca sunt cu .ceva) din if-ul de mai sus pe un array ? .length stim iti returneaza cate elemente sunt in array, dar indexOf nu stim ce face, deci cautam dupa el.

Poti sa cauti documentatia la .indexOf pe Google (javascript .indexOf), eu am gasit:
Array.prototype.indexOf() - JavaScript | MDN (mozilla.org)

Cand returneaza .indexOf(‘ceva’) -1 ? Daca citesti documentatia o sa gasesti raspunsul in primul exemplu sau primul paragraf din documentatie.

Daca tot n-ai inteles din documentatie ce face click aici

Daca ceva nu trebuie sa fie egal cu -1, inseamna ca trebuie sa fie prezent in array. indexOf va returna indexul elementului doar daca il gaseste.

2 Likes

Sau un string

În JS poți accesa și strings și arrays în mod similar. Inclusiv indexOf poate fi folosit pe string.

3 Likes

String.prototype.indexOf() - JavaScript | MDN (mozilla.org)

Exemplul lui da e un string :slight_smile: Dar e mai usor de inteles din documentatia de array.

String-ul meu trebuie sa inceapa cu litera P;

Ai înțeles bine.

String-ul meu trebuie sa fie mai mare de 5 litere, deci sa aibe minim 6 litere incluse;

Ai înțeles bine.

Nu inteleg: ‘mystery.indexOf(‘7’) !== -1’

Atunci când valoarea lui mystery este un string, mystery.indexOf('7') va returna index-ul (poziția) substring-ului 7 în valoarea lui mystery.

De exemplu:

Atunci când ai const mystery = "Eu sunt un 7", mystery.indexOf('7') va returna index-ul 11 pentru că substring-ul 7 este găsit la poziția 11.

Atunci când ai const mystery = "7 stele", mystery.indexOf('7') va returna index-ul 0 pentru că substring-ul 7 este găsit la poziția 0.

Atunci când ai const mystery = "8 stele", mystery.indexOf('7') va returna -1 pentru că substring-ul 7 nu este găsit.

Paranteză: În curs probabil este de așteptat să setezi mystery ca fiind un string, dar mystery ar putea la fel de bine să fie și un array. Ce e după = se numește valoare.

1 Like

Poti sa folosesti startsWith

In general la array-uri trebuie sa ai grija sa nu iesi din afara lui.