Verificați dacă un element există într-o matrice în JavaScript. Sintaxa ES7: Include ()

Introducere

Când încercăm să verificăm dacă un anumit element există într-o matrice în JavaScript, am avut în mod tradițional metode care nu erau Proiectat inițial pentru acest lucru.

cu noua propunere ECMAScript 2016 (ES7), în cele din urmă avem o metodă nativă pentru acest lucru: include (). Haideți-o în detaliu:

sintaxă

Include () Metoda determină dacă un aranjament include un element dat, returnați adevărat sau Fals, după caz.

Sintaxa dvs. este după cum urmează (specificație completă aici):

 array.protype.include (căutare) 

unde:

  • Searchelement Este elementul de căutare.
  • FromIndex este un parametru opțional care marchează poziția pe matrice din care este pornit elementul dat.

exemplu de bază

Cel mai simplu exemplu este că în cazul în care căutăm un element într-o matrice:

var myarr =; Consola.info (myarr.include (‘donna’); // trocONesole.info (myarr.include („gand”); // FALSE

Rețineți că această metodă returnează o booleană, ceea ce face diferit de indexul tradițional () pe care l-am folosit de la anii nouăzeci:

 console.info (myarr.indexof ('donna'); // 1console.info (myarr.indexof ("gândire"); // -1 

Din fericire, acum obținem o citire pentru a include verificările noastre într-un flux logic fără a fi nevoie să convertiți rezultatul:

 // vechi / urât moda: dacă (myarr.Indexof ('')! == -1) {/ * OK, valoarea există! * /} // NEW / NICE ES7IF (Myarr.includes ('')) {/ * OK, valoarea există! * /} 

Exemple cu index

Dacă trebuie să folosim al doilea argument, exemplele ar rămâne după cum urmează:

 console.info (myarr.include (", care", 5)); // faltereconsol.info (myarr.include ('donna', 1); // torconsole.info (myarr.include ("ventil", -1)); // Adevărat 

ca o curiozitate, putem vedea în ultimul exemplu că este posibilă utilizarea unui indice negativ, astfel încât numărul să înceapă din dreapta.

Notă: Ca de obicei, rezultatele în timpul lucrărilor cu matrice sunt întotdeauna ajustate în indicele zero.

Valori și expresii speciale

Ca și în cazul valorilor simple, putem efectua verificări Pe valori și expresii speciale:

 // helper funcțional str = () = > "donna"; var myarr =; Consola.info (myarr.include (nan)); // torconsole.info (myarr.include (infinit)); // trueconsole.info (myarr.include (str ()); // torconsole.info (myarr.include ('Don'); // FALSE 

Ultimul cec exemplifică cum include () necesită întregul element (în acest caz „donna”) pentru a raporta coincidența.

Notă: Identificarea NAN într-un set este una dintre noutățile include () împotriva indexului ().

acționând pe lanțuri

în plus față de obiectul de matrice, inclusiv () a fost, de asemenea adăugat ca metodă pentru obiectul șir, care ne permite să efectuăm verificările pe lanțurile de text. În acest caz, este posibil să căutați atât cuvinte, cât și pentru propoziții și secvențe de caractere:

 var Str = "Într-un loc al lui La Mancha, al cărui nume nu vreau să-mi amintesc, nu are prea mult timp să trăiască un Hidalgo de Los La Launa în șantierul naval, ADARGA ANCTIC, Skinny Sprout și Runner Gagged. '; consola.info (str.inllude ("loc"); // torconsole.info (str.inludes ("a căror"); // torconsole.info (str.inludes ("ero aco)); // TRUE - > Vreau să-mi amintesc Mecorder.info (str.inludes ("pata", 18)); // torconsole.info (str.inludes ("pata", 19)); // FALSE 

Notă: textul quixote pe care l-am luat de aici. Citez sursa deoarece se pare că este tema caldă în ultima vreme cu acest text particular 😉

O problemă importantă aici este de a avertiza, deoarece parametrul Forum este aplicat fiecărei litere, nu fiecărui cuvânt. Prin urmare, „pata” este între 18 + 1 primele caractere, dar nu aproximativ 19 + 1. „+ 1” în fiecare man este deoarece numărul începe (ca în matrice) și în 0.

tipic ARRAYS

Metoda noua poate fi, de asemenea, aplicată pe margini tastate:

 var typedarr = uint8Array.of (3, 14, 15); Consola.info (Typedarr.Include (15)); . Performanță  

Este timpul să verificați modul în care această metodă se ridică împotriva indexului tradițional ().

Pentru a măsura timpul, vom folosi consola browserului în sine și metoda de timp ().

Ca surse de date, vom folosi 3 matrice de lungime diferită (100, 5000 și 20000), ceea ce ne permite să vedem cum timpul sunt scalate în funcție de numărul de elemente pe care trebuie să funcționeze căutarea.

Codul pregătitoare ar fi după cum urmează:


 var prefix = ' articol-'; var ar100 = array.Apply (null, {lungime 100}) .map ((x, y) = > prefix + y), AR5000 = Array.Apply (null, { Lungime: 5000}) .map ((x, y) = > prefix + y), ar20000 = array.Apply (null, {lungime 20000}) .map (x, y) = > prefix + y); Vary key = (arr) = > prefix + arr.l lungime / 2; // Small Sizeconole.Time ("SearchingIntem '); Console.info (arre100.length, arr100.include (cheie (arre100)); console.timeend (" căutareMingItem'); Consola.Time ("SearchingItMe"); Console.info (AR100.Indexof (cheie (arre100))! == -1); consola.Timeend ("căutareMingItem '); // Medie Sizeconsole.Time ("căutareMingItem '); Console.info (AR5000.Include (cheie (ARR5000)); Console.Timeend (" căutareMingItem'); Consola.Time ("SearchingItMe"); Console.info (AR5000.Indexof (cheie (ARR5000))! == -1); consola.Timeend ("căutareMingItem '); // mare Sizeconsole.Time ("SearchingItem '); Console.info (cheie (ARR20000)); console.timeend (" căutareMingItem'); Consola. P> Verificăm fiecare matrice cu cele două metode pe care le comparăm (inclusiv și indexarea). Codul este oarecum repetitiv, dar în scopuri didactice este foarte clar.  

Arrays le creăm programatic, obținând aranjamente cu această pint:

IV id = "E38F012807"

Funcția "cheie" face elementul pe care îl vom căuta în matricea noastră. Pentru ca rezultatele să fie mai exacte, acest fragment alege valoarea centrală a fiecărei matrice, care forțează interpretul să călătorească un număr proporțional de elemente în fiecare încercare.

Cu toate pregătite, am lansat scenariul nostru și am obținut scenariul nostru și am obținut scenariul nostru Următoarele rezultate:

iv id = „f9b512a9f5”

div id = „b329c51261”

100 aranjamente 000 de aranjamente 20000 Aranjamente
Include () 1.52ms 1.24ms 1.29ms
indexef () 1.38ms 1.22ms 1.21ms

Notă: Rezultatele obținute mai sus sunt timpul mediu după 100 de execuții.

Având în vedere datele, numărul elementelor inițiale nu penalizează, rezultând chiar și mai repede cu cât este mai mare matrice.

și nici nu este o diferență de performanță între indexarea () metodelor Include () ceva, pe de altă parte, obișnuit în funcționalitățile recent încorporate în diferitele browsere.

Suport

Ca și în cazul tuturor funcționalităților emergente JavaScript, trebuie să aruncați o privire la Suport din această nouă metodă astăzi între diferitele browsere:

crom Firefox Internet Explorer Opera Safari Android Opera Mobile Safari Mobile Chrome pentru Android
47 43 43 Nu este acceptat Nu este acceptat 34 9 Nu este acceptată 34 47

salvarea cazului de browsere Microsoft, sprijinul de astăzi (noiembrie, 2016) este foarte complet.

Pollyfill

la locul de muncă precis Entitate cu browsere care nu acceptă această metodă pentru moment (Internet Explorer și Edge), putem implementa acest „Pollyfill”. Ca de obicei, este recomandabil să predați acest cod numai atunci când metoda nu este prezentă nativ.

divid id = „315677614e”> div id = „e38f012807”>

dacă (! array.protype.includes) {array.protype.includes = Funcție (Searchelement / *, de la Lindex * /) {„Utilizați stricte”; Var o = obiect (this), len = parseint (O.Lungime) ||. 0; // ieșire rapidă dacă lipsesc date dacă (len === 0) {retur fals; } var n = parseint (argumente, 10) || 0, k, valtelă; Dacă (n > = 0) {k = n; } altceva {k = len + n; Dacă (k < 0) {k = 0; }} în timp ce (k < len) {CrenyTlement = O; Dacă (SearchHelement === CrenyTlement || (căutare! } K ++; } Returnați false; };}

Notă: Codul original a fost extras și redirecționat aici.

Concluzie

Când programați, Se pare că se determină trivial dacă un element dat este prezent într-o matrice. Până în prezent, am solicitat utilizarea indexului () și o conversie ulterioară a returnării lor la o valoare booleană.

cu incllus (), problema este rezolvată prin a avea o metodă nativă care funcționează corect și că aceasta este gramatical mult mai precis. În timp ce sintaxa proprie poate fi inadecvată (suntem mai obișnuiți cu instrucțiunile precum „are () sau” conține () „), alegerea dvs. se datorează salvgardării retragerii cu aceste metode deja definite în alte cadre utilizate frecvent (MoOOols) sau În limba JavaScript însuși (set.protype.Has ()).

Ca întotdeauna, orice îmbunătățire este binevenită.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *