Matrice multidimensionale în JavaScript. Matrice bidimensională în matrice JavaScript Javascript multidimensională

În acest articol, vom analiza matricele indexate numeric JavaScript standard. Tablourile sunt declarate folosind paranteze pătrate:

fructe var = ["Măr", "Portocaliu", "Măgar"]

Pentru a extrage un element, plasați indexul între paranteze drepte. Primul index 0:

var fruits = ["Apple", "Orange", "Donkey"] alertă (fructe) alertă (fructe) alertă (fructe)

De asemenea, putem obține lungimea unui tablou JavaScript:

var fruits = ["Apple", "Orange", "Donkey"] alertă (fruits.length)

Hopa! Am creat o matrice cu două fructe și un măgar. Acum trebuie să scoatem măgarul.

Metode pop și push

Metoda pop din JavaScript elimină un element dintr-un tablou și îl returnează.

Următorul exemplu arată cum este recuperat Donkey dintr-o matrice:

var fruits = ["Apple", "Orange", "Donkey"] alert ("Șterg" + fruits.pop ()) // Acum avem doar ["Apple", "Orange"] alertă ("Acum dimensiunea matricei: "+ fructe.lungime) // măgar eliminat

Rețineți că pop modifică matricea în sine.

Analogul pop este metoda push, care adaugă un element la o matrice. De exemplu, am uitat să adăugăm o piersică:

var fruits = ["Apple", "Orange"] fruits.push ("Peach"); // acum avem alerta ["Apple", "Orange", "Peach"] ("Ultimul articol:" + fructe)

  1. Creați o matrice de stiluri cu elemente „ Jazz”, “Blues”;
  2. Adăugați valoarea „ Rock'n'Roll«;
  3. Înlocuiți a doua valoare de la sfârșit cu „ Clasic". Ar trebui să sfârșiți cu o matrice: „ Jazz”, ”Clasic”, ”Rock'n'Roll”. Codul ar trebui să funcționeze pentru orice lungime a matricei;
  4. Extrageți ultima valoare din matrice și alertați-o.

Soluţie

// 1 var styles = ["Jazz", "Bluez"] // 2 styles.push ("Rock" n "Roll") // sau: styles = "Rock" n "Roll" // 3 styles = "Classic "// 4 alertă (styles.pop ())

Metode Shift / Unshift

Metodele shift / unshift funcționează la sfârșitul unei matrice, dar puteți utiliza și shift pentru a muta articolele în sus ( prima valoare a matricei este eliminată cu o schimbare a elementelor). Metoda unshift permite JavaScript să adauge un element într-o matrice de la sfârșit:

var fruits = ["Apple", "Orange"] var apple = fruits.shift () // acum avem doar ["Orange"] fruits.unshift ("Lemon") // acum avem ["Lemon", " Alertă portocalie "] (fructe.lungime) // 2

Atât shift cât și unshift pot funcționa simultan pe mai multe elemente:

var fruits = ["Apple"] fruits.push ("Orange", "Peach") fruits.unshift ("Pineapple", "Lemon") // acum matricea arată astfel: ["Pineapple", "Lemon", „Măr”, „portocaliu”, „piersic”]

Atribuire de auto-studiu

Scrieți un cod pentru a afișa o valoare aleatorie din matricea arr prin alertă:

var arr = ["Plum", "Orange", "Donkey", "Morcov", "JavaScript"]

Notă: Codul pentru obținerea unui număr aleatoriu de la valoarea minimă la maximă (inclusiv) este după cum urmează:

var rand = min + Math.floor (Math.random () * (max + 1-min))

Soluţie

Trebuie să extragem un număr aleatoriu între 0 și lungimea maximă 1 (inclusiv):

var arr = ["Plum", "Orange", "Donkey", "Morcov", "JavaScript"] var rand = Math.floor (Math.random () * arr.length) alert (arr)

Iterarea peste o matrice

În JavaScript, iterarea peste o matrice se face folosind o buclă for:

fructe var = ["Ananas", "Lamaie", "Mere", "Portocaliu", "Peach"] pentru (var i = 0; i

Atribuire de auto-studiu

Creați o funcție de găsire (arr, valoare) care găsește o valoare într-o matrice dată și îi returnează indexul sau -1 dacă nu a fost găsită nicio valoare.

De exemplu:

arr = ["test", 2, 1.5, false] find (arr, "test") // 0 find (arr, 2) // 1 find (arr, 1.5) // 2 find (arr, 0) // -1

Soluţie

O posibilă soluție ar putea arăta astfel:

funcție găsi (matrice, valoare) (pentru (var i = 0; i

Dar acest lucru nu este adevărat, deoarece == nu spune diferența dintre 0 și fals.

Este mai corect să folosiți === atunci când lucrați cu tablouri în JavaScript. În plus, cel mai recent standard ES5 conține funcția Array # indexOf. Cu ajutorul său, putem defini o funcție după cum urmează:

funcție găsi (matrice, valoare) (dacă (matrice.indexOf) returnează matrice.indexOf (valoare) pentru (var i = 0; i

Ar fi și mai inteligent să definim găsirea printr-o condiție pentru a verifica dacă metoda indexOf există.

Atribuire de auto-studiu

Creați o funcție filterNumeric (arr) care ia o matrice și returnează o matrice nouă care conține doar valorile numerice de la arr.

Un exemplu despre cum ar trebui să funcționeze:

arr = ["a", 1, "b", 2]; arr = filterNumeric (arr); // acum arr =

Soluţie

Soluția este să faceți o buclă peste matrice și să adăugați valori la noua matrice, dacă acestea sunt numerice.

alătură-te și împarte

Uneori aveți nevoie de o modalitate rapidă de a converti o matrice JavaScript într-un șir. Pentru aceasta este folosită metoda unirii.

Concatenează matricea într-un șir folosind delimitatorul specificat:

fructe var = ["Lămâie", "Măr", "Portocală", "Piersică"]; var str = fruits.join (","); alert (str);

Conversia inversă se face cu ușurință cu metoda de împărțire:

fructe var = "Mere, portocale, piersici"; var arr = fruits.split (","); // arr conține acum alerta ["Apple", "Orange", "Peach"] (arr);

Atribuire de auto-studiu

Obiectul include o proprietate className care conține numele clasei, separate prin spații:

Scrieți o funcție addClass (obj, cls) care adaugă clasa cls, dar numai dacă nu există:

ddClass (obj, "new") // obj.className = "open menu new" addClass (obj, "open") // nu există modificări (clasa există deja) addClass (obj, "eu") // obj.className = alertă „deschideți meniul nou mă” (obj.className) //

Soluţie

Trebuie să împărțiți className și bucla în părți. Dacă nu se găsește clasa, atunci se adaugă.

Bucla este ușor optimizată pentru a crește performanța:

function addClass (elem, cls) (for (var c = elem.className.split (""), i = c.length-1; i> = 0; i--) (if (c [i] == cls ) return) elem.className + = "" + cls) var obj = (className: "open menu") addClass (obj, "new") addClass (obj, "open") alert (obj.className) // open menu nou

În exemplul de mai sus, variabila c este definită la începutul buclei, iar ultimul său indice este setat la i.

Bucla în sine este procesată în direcția opusă, terminând cu condiția i> = 0. Deoarece i> = 0 este mai rapid de verificat decât i. Ceea ce în JavaScript face căutarea într-o matrice mai rapidă.

Folosind lungimea pentru a tăia o matrice

Folosind proprietatea length, puteți tăia o matrice astfel:

Dați lungimea, iar browserul trunchiază matricea.

Matricea este un obiect, ceea ce înseamnă

De fapt, în JavaScript, Array este un obiect, complet cu setarea automată a lungimii și metode speciale.

Acest lucru diferă de conceptul din alte limbi, unde matricile reprezintă un segment contiguu de memorie. Acest lucru este, de asemenea, diferit de o listă de legături bazate pe coadă sau stivă.

Taste matriciale nenumerice

Cheile sunt numere, dar pot avea orice nume:

arr = arr = 5 arr.prop = 10 // nu faceți acest lucru

În JavaScript, tablourile sunt tabele hash cu avantajele lor de performanță, dar și dezavantaje.

De exemplu, push / pop funcționează numai pe elementele cele mai exterioare ale matricei, astfel încât acestea sunt incredibil de rapide.

push funcționează doar la final:

var arr = ["My", "array"] arr.push ("something") alert (arr) // string "array"

Metodele shift / unshift sunt lente, deoarece trebuie să renumeroteze întreaga matrice. Metoda de îmbinare poate modifica și numerotarea:

Astfel, shift / unshift este mai lent decât push / pop. Cu cât este mai mare matricea, cu atât durează mai mult JavaScript pentru a sorta matricea.

Atribuire de auto-studiu

Care va fi rezultatul? De ce?

arr = ["a", "b"] arr.push (function () (alert (this))) arr () //?

Soluţie

Deoarece matricele sunt obiecte, ar .. este de fapt un apel la o metodă a unui obiect ca obiect metodă:

arr () // la fel ca arr () // sintactic greșit, dar conceptual același: arr.2 () // rescris în același stil ca obiect.method () this = arr în acest caz este trecut la funcție, deci conținutul lui arr este afișat. arr = ["a", "b"] arr.push (function () (alert (this))) arr () // "a", "b", function

Matrici rare, descrierea lungimii

Proprietatea length vă permite să obțineți nu dimensiunea matricei în JavaScript, ci ultimul index + 1. Acest lucru este important atunci când vine vorba de tablouri rare, cu „lacune” în indici.

În exemplul următor, vom adăuga două elemente fructelor goale, dar lungimea rămâne la 100:

fructe var = // fructe matrice goale = fructe "Peach" = alertă "Apple" (fruits.length) // 100 (dar există doar 2 elemente în matrice)

Dacă încercați să scoateți un tablou rar, browserul va afișa indicii lipsă ca elemente goale:

var fruits = // fruit fruits array = "Peach" fruits = "Apple" alert (fruits) //, Peach, Apple (sau ceva de genul asta)

Dar un tablou este un obiect cu două taste. Valorile lipsă nu ocupă spațiu.

Matricele rare se comportă ciudat atunci când li se aplică metode de matrice. Nu au nicio idee că lipsesc indicii:

var fruits = fruits = "Peach" fruits = "Apple" alert (fruits.pop ()) // împingeți "Apple" (la indexul 9) alert (fruits.pop ()) // împingeți afară un setat (la indexul 8 )

Încercați să evitați matricele rare. Oricum, metodele lor nu vor funcționa bine. Folosiți în schimb obiectul.

Eliminarea dintr-o matrice

După cum știm, matricile sunt obiecte, așa că am putea folosi șterge pentru a șterge valoarea:

var arr = ["Go", "to", "home"] ștergeți arr // now arr = ["Go", nedefinit, "home"] alert (arr) // not set

Puteți vedea că valoarea este eliminată, dar nu așa cum am dori, deoarece tabloul conține un element nespecificat.

Operatorul de ștergere șterge o pereche cheie-valoare și atât. Bineînțeles, deoarece un tablou este doar un hash, poziția elementului eliminat devine nedefinită.

Cel mai adesea, trebuie să ștergem un element fără a lăsa „găuri” între indici. Există o altă metodă care ne va ajuta în acest sens.

Metoda splice

Metoda de îmbinare poate elimina și înlocui elemente din tablourile multidimensionale JavaScript. Sintaxa sa este:

arr.splice (index, deleteCount [, elem1, ..., elemN])

Șterge elementul deleteCount începând de la index și apoi introduce elem1, ..., elemN în locul său.

Să aruncăm o privire la câteva exemple:

var arr = ["Go", "to", "home"] arr.splice (1, 1) // eliminați 1 element începând de la alerta index 1 (arr.join (",")) // ["Go" , "acasă"] (1 articol eliminat)

În acest fel puteți utiliza splice pentru a elimina un element din matrice. Numerele elementelor matrice sunt deplasate pentru a umple golul:

var arr = ["Go", "to", "home"] arr.splice (0, 1) // eliminați 1 element începând de la index 0 alert (arr) // "la" a devenit primul element

Următorul exemplu arată cum să înlocuiți elementele:

Metoda splice returnează o serie de elemente eliminate:

var arr = ["Du-te", "la", "acasă", "acum"]; // eliminați primele 2 elemente var eliminate = arr.splice (0, 2) alert (eliminat) // „Du-te”, „la„<-- массив удаленных элементов splice может вставлять элементы, задайте 0 для deleteCount. var arr = ["Go", "to", "home"]; // со второй позиции // удаляем 0 // и вставляем "my", "sweet" arr.splice(2, 0, "my", "sweet") alert(arr) // "Go", "to", "my", "sweet", "home"

Această metodă poate utiliza, de asemenea, un indice negativ, care este numărat de la sfârșitul matricei:

var arr = // pentru elementul -1 (penultim) // eliminați 0 elemente, // și introduceți 3 și 4 arr.splice (-1, 0, 3, 4) alert (arr) // 1,2,3, 4.5

Atribuire de auto-studiu

Obiectul conține o proprietate className care conține numele clasei, separate prin spații:

var obj = (className: "deschideți meniul")

Scrieți o funcție removeClass (obj, cls) care elimină clasa cls dacă este dată:

removeClass (obj, "open") // obj.className = "meniu" removeClass (obj, "blabla") // fără modificări (nu există nicio clasă de eliminat)

Soluţie

Trebuie să împărțiți className în părți și să faceți o buclă peste aceste părți. Dacă se găsește o potrivire, aceasta este eliminată din matricea de obiecte JavaScript și apoi adăugată la final.

Să optimizăm puțin acest lucru:

function removeClass (elem, cls) (for (var c = elem.className.split (""), i = c.length-1; i> = 0; i--) (if (c [i] == cls ) c.splice (i, 1)) elem.className = c.join ("")) var obj = (className: "open menu") removeClass (obj, "open") removeClass (obj, "blabla") alert (obj.className) // meniu

În exemplul de mai sus, c este setat la începutul buclei, iar i este setat la ultimul său index.

Bucla în sine rulează în direcția opusă, terminându-se cu condiția i> = 0. Acest lucru se datorează faptului că i> = 0 este testat mai repede decât i. Ceea ce grăbește căutarea unei proprietăți în c.

Metoda feliei

Puteți extrage o parte dintr-o matrice folosind metoda slice (begin [, end]): var arr = ["De ce", "învățați", "JavaScript"]; var arr2 = arr.slice (0,2) // ia 2 elemente începând de la 0 alert (arr2.join (",")) // "De ce, învață"

Rețineți că această metodă nu modifică numărul de elemente din matrice în JavaScript, ci copiază o parte din aceasta.

Puteți omite al doilea argument pentru a obține toate elementele începând de la un anumit index:

var arr = ["De ce", "învățați", "JavaScript"]; var arr2 = arr.slice (1) // acceptă toate elementele începând cu 1 alertă (arr2.join (",")) // "învață, JavaScript"

Metoda acceptă indicii negativi, la fel ca String # slice.

Metoda inversă

O altă metodă utilă este inversa. Să presupunem că vreau să obțin ultima parte a domeniului, de exemplu, „ com"Din" my.site.com”. Iată cum o puteți face:

var domain = "my.site.com" var last = domain.split ("."). reverse () alert (last)

Rețineți că matricile JavaScript acceptă o sintaxă complexă (reverse ()) pentru a invoca o metodă și apoi pentru a extrage un element din matricea rezultată.

Puteți efectua apeluri mai lungi precum invers () 0] arr.sort () alert (arr) // 1, 15, 2

Rulați codul de mai sus. Veți primi comanda 1, 15, 2. Acest lucru se datorează faptului că metoda convertește totul într-un șir și folosește ordinea lexicografică implicită.

În articolul precedent, am vorbit despre ce este și despre cum să lucrați cu el. În acest articol vom vorbi despre matrice multidimensională.

Este o matrice care are unul sau mai multe elemente, care sunt și matrice. În funcție de profunzimea anunțului, în special, acesta poate fi apelat matrice bidimensională(2 nivele) matrice tridimensională(3 nivele) cu patru dimensiuni(4 nivele) și așa mai departe.

Cel mai popular, după un tablou unidimensional, cel mai des utilizat este un tablou bidimensional. O vom studia mai detaliat.


După cum puteți vedea, elementele unui tablou bidimensional sunt tablouri unidimensionale. Dacă aceste matrice unidimensionale ar conține mai multe matrice, atunci matricea ar ar fi deja tridimensională.

De exemplu, să creăm trei tablouri simple și să le completăm cu date. Vom umple primul cu numere pare, al doilea cu numere impare, iar al treilea cu unele date arbitrare.

// Declarați trei matrice goale var evenNumbers = new Array (); // Variabila k - pentru indicii matrice Numere pare var k = 0; var oddNumbers = new Array (); // Variabila n - pentru indicii matricelor oddNumbers var n = 0; var date = matrice nouă („mașină”, „avion”, adevărat, 89, „m”); // Completați matricea EvenNumbers, cu numere pare pentru (var i = 1; i

Pentru a vedea ce este în interiorul matricei, puteți utiliza un instrument precum consolă.

De exemplu, vrem să vedem conținutul unui tablou cu numere impare oddNumbers. Pentru a face acest lucru, scrieți următoarea linie în codul de mai jos:

Console.log (oddNumbers);

Pentru a vedea rezultatul, trebuie să deschideți consola în browser... În Google Chrome, acest lucru se face astfel: faceți clic dreapta pe pagină și, din meniul contextual, selectați ultima opțiune „Vizualizați codul”, adică inspectorul. În versiunea în limba engleză, această opțiune se numește Inspect.


Și sub bara de instrumente pentru dezvoltatori va apărea. În acesta, trebuie să accesați fila Consolă.


Acum, pentru a creați o matrice bidimensională, trebuie să-l declarați și să adăugați la acesta matricile unidimensionale pe care le-ați creat mai sus.

// Declarați o matrice bidimensională twoDimens și completați-o var twoDimens = new Array (Numere pare, Numere impare, date); console.log (twoDimens);

Să vedem conținutul acestei matrice în consolă.


iterație pe o matrice bidimensională

În primul rând, să învățăm cum se accesează elementele unui tablou bidimensional.

Ca și în cazul matricelor unice, elementele sunt accesate de indicii lor.

De exemplu, să afișăm elementul la indexul 3 dintr-o matrice cu numere impare (oddNumbers). Indexul matricei unidimensionale oddNumbers din matricea bidimensională twoDimens este unul (1).

Document.write ("Elementul cu indexul 3 din matricea de numere impare oddNumbers este:" + twoDimens); // Element: 7

În tabloul twoDimens, ne referim la elementul din indexul 1. Elementul din acel index este matricea oddNumbers. Și în această matrice, accesăm deja elementul cu indexul 3, care este numărul 7.

Acum să trecem la întrebarea însăși cum să iterați pe o matrice bidimensională.

Bucla peste o matrice bidimensională se face folosind o buclă dublă. De exemplu, să repetăm ​​matricea noastră twoDimens.

Pentru (var i = 0; i< twoDimens.length; i++){ for(var j = 0; j < twoDimens[i].length; j++){ document.write("

Element cu index "+ i +" "+ j +" este egal cu: „+ twoDimens [i] [j] +”

"); } }

În prima buclă, vom itera asupra matricei twoDimens în sine. În a doua buclă, iterăm deja asupra elementului în sine (matrice). În primul rând, variabila i este egală cu 0. Prin urmare, în cea de-a doua buclă, iterăm mai întâi peste prima matrice evenNumbers, care are index 0. Și deja în interiorul celei de-a doua bucle, accesăm elementele acestei matrice. Astfel: twoDimens [j]. Unde j variază de la 0 la lungimea matricei EvenNumbers.

După iterarea peste elementele din prima matrice, ne întoarcem la prima buclă, incrementăm variabila i și continuăm să iterăm peste a doua matrice oddNumbers, care are indexul 1. Și astfel, iterăm peste fiecare element al celor două dimensiuni matrice twoDimens.

Acum să vedem rezultatul acestei căutări:


Despre asta am vrut să vorbesc în acest articol. Acum știți cum să creați o matrice bidimensională, cum să accesați elementele unei matrice bidimensionale și cum să iterați pe o matrice bidimensională. Sper că totul a fost clar. Vă doresc mult succes!

Matrice

Matrice este o colecție ordonată de valori. Valorile dintr-un tablou se numesc elemente și fiecare element este caracterizat printr-o poziție numerică în tablou, numită index. Matricile din JavaScript sunt netipate: elementele unui tablou pot fi de orice tip și diferite elemente ale aceluiași tablou pot fi de tipuri diferite. Elementele matrice pot fi chiar obiecte sau alte matrici, permițându-vă să creați structuri de date complexe, cum ar fi matrici de obiecte și matrici de matrici.

Indicii matricei din JavaScript sunt bazate pe zero și utilizează numere întregi pe 32 de biți - primul element al matricei are indexul 0. Matricile JavaScript sunt dinamice: pot crește și se pot micșora după cum este necesar; nu este nevoie să declarați dimensiuni fixe de matrice atunci când sunt create sau să alocați din nou memoria atunci când sunt redimensionate.

Matricile din JavaScript sunt o formă specializată de obiecte, iar indicii matricii înseamnă puțin mai mult decât doar nume de proprietăți, care coincident sunt numere întregi.

Crearea de matrice

Cel mai simplu mod de a crea o matrice este cu un literal, care este o listă simplă separată prin virgule a elementelor matricei între paranteze pătrate. Valorile dintr-o matrice literală nu trebuie să fie constante - pot fi orice expresii, inclusiv literele obiectului:

Var gol =; // Numere var variabile matrice =; // Matrice cu cinci elemente numerice var misc = [1.1, true, "a",]; // 3 elemente de diferite tipuri + virgulă de bază var var = 1024; var table =; // Matrice cu variabile var arrObj = [,]; // 2 matrice în interiorul obiectelor care conțin

Sintaxa literală a matricei vă permite să inserați o virgulă opțională, adică literal [,] corespunde unui tablou cu două elemente, nu cu trei.

O altă modalitate de a crea o matrice este să apelați constructorul Array ()... Constructorul poate fi apelat în trei moduri diferite:

    Apelați constructorul fără argumente:

    Var arr = new Array ();

    În acest caz, va fi creată o matrice goală echivalentă cu literalul.

    Apelați constructorul cu un singur argument numeric specificând lungimea tabloului:

    Var arr = new Array (10);

    În acest caz, va fi creată o matrice goală cu lungimea specificată. Această formă de apelare a constructorului Array () poate fi utilizată pentru a prealoca memoria pentru o matrice dacă numărul elementelor sale este cunoscut în prealabil. Rețineți că acest lucru nu stochează nici o valoare în matrice.

    Specificați în mod explicit valorile primelor două sau mai multe elemente matrice sau ale unui element nenumeric într-un apel constructor:

    Var arr = new Array (5, 4, 3, 2, 1, "test");

    În acest caz, argumentele constructorului devin valorile elementelor noii matrice. Utilizarea literelor matrice este aproape întotdeauna mai ușoară decât utilizarea constructorului Array () în acest fel.

Citirea și scrierea elementelor matrice

Elementele matrice sunt accesate folosind operatorul. Trebuie să existe o referință matrice în stânga parantezelor. O expresie arbitrară care returnează o valoare întreagă non-negativă trebuie să fie în paranteze. Această sintaxă este potrivită atât pentru citirea, cât și pentru scrierea valorii unui element matrice. Prin urmare, toate următoarele declarații JavaScript sunt valabile:

// Creați o matrice cu un singur element var arr = ["lume"]; // Citiți articolul 0 valoare var = arr; // Scrieți valoarea elementului 1 arr = 3,14; // Scrieți valoarea elementului 2 i = 2; arr [i] = 3; // Scrieți o valoare pentru elementul 3 arr = "salut"; // Citiți articolele 0 și 2, scrieți valoarea la articolul 3 arr] = arr;

Permiteți-mi să vă reamintesc că matricele sunt un tip specializat de obiect. Parantezele pătrate utilizate pentru a accesa elementele matricei acționează exact la fel ca parantezele pătrate utilizate pentru a accesa proprietățile unui obiect. Interpretorul JavaScript convertește indicii numerici din paranteze în șiruri - indexul 1 devine șirul „1” - și apoi folosește șirurile ca nume de proprietăți.

Nu este nimic special în conversia indicilor numerici în șiruri: același lucru se poate face cu obiecte obișnuite:

Var obj = (); // Creați un obiect simplu obj = "one"; // Indexează-l cu numere întregi

Particularitatea matricilor este că atunci când se utilizează nume de proprietăți care sunt numere întregi care nu sunt negative, matricile determină automat valoarea proprietății lungime... De exemplu, matricea arr a fost creată mai sus cu un singur element. Apoi, valorile au fost atribuite elementelor sale cu indicii 1, 2 și 3. Ca urmare a acestor operații, valoarea proprietății de lungime a tabloului s-a schimbat și a devenit egală cu 4.

Ar trebui să faceți o distincție clară între indexurile dintr-o matrice și numele proprietăților obiectelor. Toate indexurile sunt nume de proprietăți, dar numai proprietățile cu nume întregi sunt indexuri. Toate tablourile sunt obiecte și le puteți adăuga proprietăți cu orice nume. Cu toate acestea, dacă atingeți proprietăți care sunt indicii matrice, matricile reacționează prin actualizarea valorii proprietății de lungime, după cum este necesar.

Rețineți că negativ și non-întregi sunt permise ca indici matrice. În acest caz, numerele sunt convertite în șiruri, care sunt folosite ca nume de proprietăți.

Adăugarea și eliminarea elementelor matrice

Am văzut deja că cel mai simplu mod de a adăuga elemente la o matrice este de a atribui valori noilor indici. De asemenea, puteți utiliza metoda pentru a adăuga unul sau mai multe elemente la sfârșitul unui tablou Apăsați ():

Var arr =; // Creați o matrice goală arr.push ("zero"); // Adăugați o valoare la sfârșitul arr.push („one”, 2); // Adăugați încă două valori

De asemenea, puteți adăuga un element la sfârșitul unui tablou atribuind o valoare elementului arr. Pentru a insera un element la începutul unui tablou, puteți utiliza metoda unshift () iar elementele existente în matrice sunt deplasate la indicii superiori.

Puteți șterge elemente ale unui tablou folosind operatorul de ștergere, cum ar fi proprietățile obișnuite ale obiectelor:

Var arr =; ștergeți arr; 2 in arr; // false, indexul 2 din matrice este nedefinit arr.length; // 3: operatorul de ștergere nu modifică proprietatea lungimii matricei

Eliminarea unui element este similară (dar ușor diferită) atribuind o valoare nedefinită acelui element. Rețineți că aplicarea operatorului de ștergere la un element dintr-o matrice nu modifică valoarea proprietății lungime și nici nu se deplasează în jos pentru elementele indexate mai sus pentru a umple golul rămas după ștergerea elementului.

În plus, este posibil să eliminați elemente la sfârșitul unui tablou prin simpla atribuire a unei noi valori proprietății length. Tablourile au o metodă pop ()(opus push ()), care scade lungimea matricei cu 1 și returnează valoarea elementului eliminat. Există și o metodă schimb ()(opus unshift ()), care elimină elementul de la începutul matricei. Spre deosebire de operatorul de ștergere, metoda shift () deplasează toate elementele în jos cu o poziție sub indicii lor curenți.

În cele din urmă, există o metodă multifuncțională splice (), care vă permite să inserați, să ștergeți și să înlocuiți elemente de tablouri. Schimbă valoarea proprietății de lungime și schimbă elementele matricei cu indici mai mici sau mai mari, după cum este necesar. Vom discuta toate aceste metode puțin mai târziu.

Tablouri multidimensionale

JavaScript nu acceptă tablouri multidimensionale „reale”, dar face o treabă bună de a le imita folosind tablouri din tablouri. Pentru a accesa un element de date dintr-o matrice de matrice, este suficient să utilizați operatorul de două ori.

De exemplu, să presupunem că matricea variabilă este o matrice de matrice de numere. Fiecare element al matricei [x] este o matrice de numere. Puteți utiliza matricea de expresie [x] [y] pentru a accesa un anumit număr dintr-o matrice. Mai jos este un exemplu specific în care o matrice bidimensională este utilizată ca tabel de înmulțire:

// Creați o matrice multidimensională var table = new Array (10); // Există 10 rânduri în tabel pentru (var i = 0; i

Metode de clasă matrice

Standardul ECMAScript 3 definește multe funcții convenabile pentru lucrul cu matricele ca parte a Array.prototype, care sunt disponibile ca metode ale oricărei matrice. Aceste metode vor fi prezentate în subsecțiunile următoare.

Metoda Join ()

Metoda Array.join () convertește toate elementele din matrice în șiruri, le concatenează și returnează șirul rezultat. Un argument opțional poate fi transmis metodei cu un șir care va fi folosit pentru a separa elementele din șirul de rezultate. Dacă nu este specificat niciun șir de delimitator, se utilizează o virgulă. De exemplu, următorul fragment rezultă în șirul „1,2,3”:

Var arr =; arr.join (); // "1,2,3" arr.join ("-"); // „1-2-3”

Metoda inversă ()

Metoda Array.reverse () inversează ordinea elementelor dintr-o matrice și returnează o matrice reordonată. Permutarea se face direct pe matricea originală, adică această metodă nu creează o nouă matrice cu elemente reordonate, ci le reordonează într-o matrice deja existentă. De exemplu, următorul fragment, care folosește metodele reverse () și join (), are ca rezultat șirul „3,2,1”:

Var arr =; arr.reverse (). join (); // „3,2,1”

Metoda Sort ()

Metoda Array.sort () sortează elementele din matricea originală și returnează matricea sortată. Dacă metoda sort () este apelată fără argumente, sortarea se efectuează alfabetic (pentru comparație, elementele sunt convertite temporar în șiruri dacă este necesar). Elementele nedefinite sunt înfășurate până la capătul matricei.

Puteți trece o funcție de comparație ca argument pentru sortare () pentru a sorta în orice altă ordine non-alfabetică. Această funcție stabilește care dintre cele două argumente ar trebui să fie primele în lista sortată. Dacă primul argument trebuie să preceadă al doilea, funcția de comparație trebuie să returneze un număr negativ. Dacă primul argument este să-l urmeze pe cel de-al doilea în matricea sortată, atunci funcția trebuie să returneze un număr mai mare decât zero. Și dacă cele două valori sunt echivalente (adică ordinea lor nu este importantă), funcția de comparație ar trebui să returneze 0:

Var arr =; arr.sort (); // Ordinea alfabetică: 1111, 222, 33, 4 ar.sort (funcția (a, b) (// Ordinea numerică: 4, 33, 222, 1111 returnează ab; // Returnează valoarea 0 // în funcție de sortare comanda a și b)); // Sortează înapoi, de la cel mai mare la cel mai mic arr.sort (funcția (a, b) (returnează b-a));

Observați cât de convenabil este să folosiți o funcție fără nume în acest fragment. Funcția de comparație este utilizată doar aici, deci nu este nevoie să îi dați un nume.

Metoda concat ()

Metoda Array.concat () creează și returnează o nouă matrice care conține elementele matricei originale pe care a fost apelată metoda concat () și valorile oricăror argumente transmise metodei concat (). Dacă oricare dintre aceste argumente sunt ele însele o matrice, elementele sale sunt adăugate matricei returnate. Cu toate acestea, trebuie remarcat faptul că nu există o conversie recursivă a unui tablou de la tablouri la tablou unidimensional. Metoda concat () nu modifică matricea originală. Mai jos sunt câteva exemple:

Var arr =; arr.concat (4, 5); // Returnează arr.concat (); // Returnează arr.concat (,) // Returnează arr.concat (4,]) // Returnează]

Metoda Slice ()

Metoda Array.slice () returnează o felie sau un subarray al matricei specificate. Cele două argumente ale metodei definesc începutul și sfârșitul bucății returnate. Matricea returnată conține elementul numerotat în primul argument plus toate elementele ulterioare până la (dar neincluzând) elementul numerotat în al doilea argument.

Dacă este specificat un singur argument, matricea returnată conține toate elementele de la poziția de pornire până la sfârșitul matricei. Dacă oricare dintre argumente este negativ, acesta specifică numărul elementului relativ la sfârșitul matricei. Deci, argumentul -1 corespunde ultimului element al matricei, iar argumentul -3 corespunde celui de-al treilea element al matricei de la sfârșit. Aici sunt cateva exemple:

Var arr =; sl.arrice (0,3); // Returnează arr.slice (3); // Returnează arr.slice (1, -1); // Returnează arr.slice (-3, -2); // Va reveni

Metoda splice ()

Metoda Array.splice () este o metodă generică care inserează sau elimină elemente dintr-o matrice. Spre deosebire de metodele slice () și concat (), metoda splice () modifică matricea originală pe care a fost apelată. Rețineți că metodele splice () și slice () au nume foarte similare, dar efectuează operațiuni complet diferite.

Metoda splice () poate elimina elemente dintr-o matrice, poate insera elemente noi sau le poate face pe ambele în același timp. Elementele matricei sunt deplasate după cum este necesar, astfel încât după inserare sau ștergere, se formează o secvență contiguă.

Primul argument al metodei splice () specifică poziția din matrice din care să se insereze și / sau să se șteargă. Al doilea argument specifică numărul de elemente care trebuie eliminate (tăiate) din matrice. Dacă al doilea argument este omis, toate elementele matricei din matricea specificată până la sfârșitul matricei sunt eliminate. Metoda splice () returnează o matrice a elementelor eliminate sau (dacă niciunul dintre elemente nu a fost eliminat) o matrice goală.

Primele două argumente ale metodei splice () specifică elementele matricei care trebuie eliminate. Aceste argumente pot fi urmate de orice număr de argumente suplimentare care specifică elementele care trebuie inserate în matrice, începând de la poziția specificată în primul argument.

Var arr =; arr.splice (4); // Returnează arr = arr.splice (1,2); // Returnează arr = arr.splice (1,1); // Va reveni; arr = arr =; arr.splice (2,0, "a", "b"); // Va reveni; arr =

Metodele push () și pop ()

Metodele push () și pop () vă permit să lucrați cu tablouri precum stive. Metoda push () adaugă unul sau mai multe elemente noi la sfârșitul tabloului și returnează noua sa lungime. Metoda pop () efectuează operația opusă - elimină ultimul element al tabloului, scade lungimea tabloului și returnează valoarea pe care a eliminat-o. Rețineți că ambele metode modifică matricea originală mai degrabă decât să creeze o copie modificată a acesteia.

Metodele unshift () și shift ()

Metodele unshift () și shift () se comportă la fel ca push () și pop (), cu excepția faptului că inserează și elimină elemente la începutul matricei, nu la sfârșit. Metoda unshift () deplasează elementele existente către indici mai mari pentru a face loc, adaugă elementul sau elementele la începutul matricei și returnează noua lungime a matricei. Metoda shift () elimină și returnează primul element al tabloului, deplasând toate elementele ulterioare în jos o poziție pentru a ocupa spațiul liber la începutul tabloului.

Ultima actualizare: 09.04.2018

Tablourile sunt destinate funcționării cu seturi de date. Expresia new Array () este utilizată pentru a crea o matrice:

Var myArray = Array nou ();

Există, de asemenea, o modalitate mai scurtă de a inițializa o matrice:

Var myArray =;

În acest caz, creăm o matrice goală. Dar puteți adăuga și date inițiale:

Var oameni = ["Tom", "Alice", "Sam"]; console.log (oameni);

În acest caz, myArray va avea trei elemente. Grafic, poate fi reprezentat după cum urmează:

Indicii sunt utilizați pentru a se referi la elementele individuale ale unui tablou. Numărarea începe de la zero, adică primul element va avea index 0, iar ultimul va avea index 2:

Var oameni = ["Tom", "Alice", "Sam"]; console.log (oameni); // Tom var person3 = oameni; // Sam console.log (person3); // Sam

Dacă încercăm să accesăm un element la un indice mai mare decât dimensiunea matricei, vom deveni nedefiniți:

Var oameni = ["Tom", "Alice", "Sam"]; console.log (oameni); // nedefinit

De asemenea, după index, sunt setate valorile pentru elementele matricei:

Var oameni = ["Tom", "Alice", "Sam"]; console.log (oameni); // Tom people = "Bob"; console.log (oameni); // Bob

Mai mult, spre deosebire de alte limbi cum ar fi C # sau Java, puteți instala un element care nu a fost instalat inițial:

Var oameni = ["Tom", "Alice", "Sam"]; console.log (oameni); // nedefinit - există doar trei elemente în matricea people = "Bob"; console.log (oameni); // Bob

De asemenea, este demn de remarcat faptul că, spre deosebire de un număr de limbaje de programare în JavaScript, matricile nu sunt puternic tastate, o matrice poate stoca date de diferite tipuri:

Obiecte Var = ["Tom", 12, adevărat, 3,14, fals]; console.log (obiecte);

operator de răspândire

Operatorul spread ... vă permite să luați valori dintr-o matrice separat:

Să numere =; console.log (... numere); // 1 2 3 4 console.log (numere); //

Operatorul spread este specificat înainte de matrice. Ca rezultat, expresia ... numere va returna un set de numere, dar nu va fi o matrice, ci valori individuale.

Tablouri multidimensionale

Tablourile pot fi unidimensionale și multidimensionale. Fiecare element dintr-un tablou multidimensional poate fi un tablou separat. Mai sus am considerat un tablou unidimensional, acum să creăm un tablou multidimensional:

Var numere1 =; // matricea unidimensională var numere2 = [,]; // matrice bidimensională

Vizual, ambele tablouri pot fi reprezentate după cum urmează:

Numere matrice unidimensionale1

Pentru a obține un singur element dintr-o matrice, se folosește și un index:

Var tomInfo = oameni;

Abia acum variabila tomInfo va reprezenta o matrice. Pentru a obține un element în interiorul unui tablou imbricat, trebuie să folosim a doua dimensiune a acestuia:

Console.log ("Nume:" + persoane); // Tom console.log ("Age:" + persoane); // 25

Adică, dacă putem reprezenta vizual o matrice bidimensională sub forma unui tabel, atunci elementul se va referi la celula tabelului, care este situată la intersecția primului rând și a celei de-a doua coloane (prima dimensiune este 0 - un rând, a doua dimensiune - 1 - o coloană).

De asemenea, putem face sarcina:

Var oameni = [["Tom", 25, fals], ["Bill", 38, adevărat], ["Alice", 21, fals]]; oameni = 56; // atribuiți o valoare separată console.log (persoane); // 56 persoane = ["Bob", 29, fals]; // atribuiți un array console.log (persoane); // Bob

Atunci când creăm tablouri multidimensionale, nu suntem limitați doar la cele bidimensionale, ci putem folosi și tablouri cu dimensiuni mari:

Numere var =; numere =; // acum numere este o matrice bidimensională numere =; // acum numere este o matrice tridimensională numere = 5; // primul element al matricei 3D este 5 console.log (numere);

Salutări tuturor celor interesați de matrice și sortare multidimensionale JavaScript. În publicația curentă, voi încerca să abordez acest subiect în toate detaliile.

Prin urmare, după ce citiți acest articol, veți afla de ce sunt utilizate matrici multidimensionale în aplicațiile web, cum sunt create și cum pot fi manipulate și sortate. Să trecem la învățare!

Cum sunt create matrici multidimensionale și la ce servesc?

Pentru început, merită să ne amintim cum este creată o matrice unidimensională obișnuită.

var array =

Acum amintiți-vă că o matrice multidimensională este o matrice de matrice. Sunt de acord, sună ca o tautologie. Cu toate acestea, citiți din nou definiția. Într-adevăr, o matrice multidimensională constă dintr-un anumit număr de materiale imbricate.

Luați în considerare următoarea situație. La începutul unui joc, utilizatorul își introduce numele, iar după final, pe ecran este afișat un tabel de evaluare cu numele jucătorilor și înregistrările acestora.

Este clar că astfel de informații sunt stocate într-o bază de date. Dar când îl scoatem din baza de date, obținem o matrice multidimensională. La urma urmei, fiecare subarray conține datele de conectare ale jucătorului și numărul de puncte marcate.

Totul va arăta astfel:

var rezultate = [["Markus", 333], ["Natasha", 211], ["Alexey", 124]];

După cum puteți vedea, informațiile pot fi stocate eterogen. Poate fi șiruri, numere și chiar. Acest lucru este posibil, deoarece matricile din ele sunt netipate.

În acest caz, accesul la elemente are loc printr-un operator dublu.

Pentru a consolida materialul, analizați un mic program.

Rezultate =

Tablourile reprezintă un mod destul de convenabil de a stoca date complexe comandate în timp ce le prelucrați. În plus, este foarte convenabil să lucrați cu ei și, în același timp, viteza de procesare a acestora este destul de mare.

Metode de sortare a datelor

Pentru tablourile din JavaScript, există o metodă încorporată numită fel ()... Acest instrument este foarte flexibil. Și acum voi explica de ce.

Dacă utilizați o metodă fără parametri, atunci aceasta comandă automat subarrays-urile după primul element în ordine alfabetică. Deci, atunci când sună rezultate.fel () obiectul analizat va arăta astfel:

Alexey, 124

Markus, 333

Natasha, 211

Și dacă schimbați elementele din fiecare matrice imbricată, veți obține:

124, Alexey

211, Natasha

333, Markus

În acest caz, pentru comparație, toate elementele sunt convertite temporar în șiruri.

Dacă, pentru a rezolva o anumită sarcină, aveți nevoie de o funcție care sortează elementele într-un mod non-standard, atunci puteți să o scrieți singur și să o transmiteți ca parametru la fel ()... Trebuie avut în vedere faptul că o funcție personalizată trebuie să returneze:

  • un număr pozitiv (în general alegeți 1) dacă primul articol specificat îl urmează pe cel de-al doilea în comparație;
  • un număr negativ (de obicei -1) dacă al doilea element selectat ar trebui să urmeze primul;
  • zero dacă cele două valori testate sunt egale.

Ca exemplu, să luăm matricea inițială rezultate sortează după puncte. Mai mult, rezultatele vor fi sortate de la cel mai mare la cel mai mic. Acest lucru se poate face în două moduri.

În prima versiune, am schimbat logica de sortare, adică într-o situație în care este necesar să returnez un număr pozitiv, returnez unul negativ și invers.

Tabel de înregistrare:

Dar în cea de-a doua metodă, am lăsat intactă logica de sortare, dar am folosit în plus o altă metodă - invers ()... După cum sugerează și numele, inversul inversează ordinea elementelor.

Prin urmare, funcția sort () va arăta astfel:

1 2 3 4 5 function RecordSort (a, b) (if (a> b) return 1; else if (a< b) return -1; else return 0; }

function RecordSort (a, b) (if (a> b) return 1; else if (a< b) return -1; else return 0; }

După aceea, să adăugăm metoda de mai sus.

Concluzia se face în mod similar.

Vreau să vă atrag atenția asupra unui punct important. Atunci când utilizați aceste funcții, toate modificările apar în matricea căreia le aplicați. Astfel, dacă trebuie să păstrați forma originală a datelor, creați o copie și apoi editați-o.

Ei bine, așa că am vorbit despre tablouri multidimensionale și sortarea lor. Dacă ți-a plăcut articolul, abonează-te la blog și citește alte publicații la fel de interesante. Aș fi recunoscător pentru repostări. Pana data viitoare!

Pa! Pa!

Cu respect, Roman Chueshov