Matrice în JavaScript. Matrice multidimensionale în javascript și mai multe moduri de a le sorta Matrice multidimensionale în exemple de javascript

În articolul anterior, am vorbit despre ce este și cum să lucrăm 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 numit matrice bidimensională(2 nivele) fie matrice tridimensională(3 nivele) fie patrudimensională(4 nivele) și așa mai departe.

Cel mai popular, după matricea unidimensională, cea mai folosită este matricea bidimensională. O vom studia mai detaliat.


După cum puteți vedea, elementele unei matrice bidimensionale sunt matrice unidimensionale. Dacă aceste matrice unidimensionale ar conține mai multe matrice, atunci matricea arr ar fi deja tridimensională.

De exemplu, să creăm trei matrice simple și să le umplem cu date. Vom umple primul cu numere pare, al doilea cu numere impare, iar al treilea cu câteva date arbitrare.

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

Pentru a vedea ce se află în interiorul matricei, puteți utiliza un astfel de instrument precum consolă.

De exemplu, dorim 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 (numere impare);

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ă, iar din meniul contextual, selectați ultima opțiune „Vizualizare cod”, 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 el, trebuie să accesați fila Consolă.


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

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

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


iterând 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 prin indicii lor.

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

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

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

Acum să trecem la întrebarea în sine cum să bucleți peste o matrice bidimensională.

Bucla peste o matrice bidimensională se face folosind o buclă dublă. De exemplu, să iterăm peste 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: „+ două dimensiuni [i] [j] +”

"); } }

În prima buclă, iterăm peste matricea twoDimens în sine. În a doua buclă, repetăm ​​deja elementul în sine (matrice). În primul rând, variabila i este egală cu 0. Prin urmare, în a doua buclă, mai întâi iterăm peste primul tablou evenNumbers, care are indicele 0. Și deja în interiorul celei de-a doua bucle, accesăm elementele acestei matrice. Astfel: douăDimensiuni [j]. Unde j variază de la 0 la lungimea matricei evenNumbers.

După iterarea elementelor din prima matrice, revenim la prima buclă, incrementăm variabila i și continuăm să iterăm peste a doua matrice oddNumbers, care are indicele 1. Și astfel iterăm peste fiecare element al matricei bidimensionale. două dimensiuni.

Acum să ne uităm la rezultatul acestei căutări:


Despre asta am vrut să vorbesc în acest articol. Acum știi cum să creezi o matrice bidimensională, cum să accesezi elementele unei matrice bidimensionale și cum să iterați peste o matrice bidimensională. Sper că totul a fost clar. Va doresc mult succes!

În acest articol, vom arunca o privire asupra matricelor standard JavaScript indexate numeric. Matricele sunt declarate folosind paranteze drepte:

var fructe = ["Mer", "Portocale", "Magar"]

Pentru a extrage un element, plasați indicele acestuia între paranteze drepte. Primul indice 0:

var fructe = ["Mer", "Orange", "Magar"] alertă (fructe) alertă (fructe) alertă (fructe)

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

var fructe = alertă [„Mer”, „Portocale”, „Măgar”] (fructe.lungime)

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

Metodele pop și push

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

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

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

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 fructe = ["Mer", "Orange"] fructe.push ("Piersic"); // acum avem alertă ["Mere", "Portocală", "Piersică"] ("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ă ajungeț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 stiluri = ["Jazz", "Bluez"] // 2 stiluri.push ("Rock" n "Roll") // sau: stiluri = "Rock" n "Roll" // 3 stiluri = "Clasic „// 4 alerte (styles.pop ())

Metode de schimbare/renunțare

Metodele shift / unshift funcționează la sfârșitul unei matrice, dar puteți folosi și shift pentru a muta elementele în sus ( prima valoare a matricei este eliminată cu o deplasare a elementelor). Metoda unshift permite JavaScript să adauge un element la 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", " Portocală"] alertă (fructe.lungime) // 2

Atât shift, cât și unshift pot funcționa pe mai multe elemente în același timp:

var fruits = ["Apple"] fruits.push ("Orange", "Peach") fruits.unshift ("Ananas", "Lămâie") // acum matricea arată astfel: ["Ananas", "Lămâie", „Mer”, Portocală, Piersici”]

Temă de auto-studiu

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

var arr = ["Prune", "Orange", "Magar", "Morcov", "JavaScript"]

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

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

Soluţie

Trebuie să extragem un număr aleatoriu între 0 și arr.length-1 (inclusiv):

var arr = ["Prune", "Orange", "Magar", "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:

var fructe = ["Ananas", "Lămâie", "Mer", "Portocală", "Piersică"] pentru (var i = 0; i

Temă de auto-studiu

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

De exemplu:

arr = [„test”, 2, 1,5, fals] găsiți (arr, „test”) // 0 găsiți (arr, 2) // 1 găsiți (arr, 1.5) // 2 găsiți (arr, 0) // -1

Soluţie

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

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

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

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

funcția find (matrice, valoare) (dacă (array.indexOf) returnează matrice.indexOf (valoare) pentru (var i = 0; i

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

Temă de auto-studiu

Creați o funcție filterNumeric (arr) care preia o matrice și returnează o nouă matrice care conține numai valorile numerice din arr.

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

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

Soluţie

Soluția este să faci bucla peste matrice și să adaugi valori la noua matrice dacă acestea sunt numerice.

uniți și despărțiți

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

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

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

Conversia inversă se face cu ușurință prin metoda împărțirii:

fructe var = „Mer, Portocală, Piersică”; var arr = fructe.split (","); // arr conține acum ["Mere", "Portocală", "Piersică"] alertă (arr);

Temă de auto-studiu

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

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

ddClass (obj, "new") // obj.className = "deschide meniu nou" addClass (obj, "open") // nicio modificare (clasa există deja) addClass (obj, "me") // obj.className = Alertă „deschideți meniu nou” (obj.className) //

Soluţie

Trebuie să împărțiți className și bucla în părți. Dacă clasa nu este găsită, este adăugată.

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

funcția addClass (elem, cls) (pentru (var c = elem.className.split (""), i = c.length-1; i> = 0; i--) (dacă (c [i] == cls) ) return) elem.className + = "" + cls) var obj = (className: "open menu") addClass (obj, "new") addClass (obj, "open") alert (obj.className) // deschide meniul 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ă.

Utilizarea lungimii pentru a tăia o matrice

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

Dați lungimea, iar browserul trunchiază matricea.

Array este un obiect, ceea ce înseamnă

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

Acest lucru diferă de conceptul din alte limbi, unde matricele reprezintă un segment contigu de memorie. De asemenea, este diferit de o listă legată bazată pe coadă sau stivă.

Chei de matrice non-numerice

Cheile sunt numere, dar pot avea orice nume:

arr = arr = 5 arr.prop = 10 // nu face asta

În JavaScript, matricele 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, deci sunt incredibil de rapide.

push funcționează doar la capăt:

var arr = ["My", "array"] arr.push ("ceva") alert (arr) // șir "array"

Metodele Shift / Unshift sunt lente, deoarece trebuie să renumeroteze întreaga matrice. Metoda de îmbinare poate provoca și renumerotare:

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

Temă de auto-studiu

Care va fi rezultatul? De ce?

arr = ["a", "b"] arr.push (funcție () (alertă (aceasta))) arr () //?

Soluţie

Deoarece tablourile sunt obiecte, arr .. este de fapt un apel la o metodă a unui obiect precum obj metodă:

arr () // la fel ca arr () // greșit din punct de vedere sintactic, dar același din punct de vedere conceptual: arr.2 () // rescris în același stil ca obj.method () this = arr în acest caz este transmis funcției, astfel încât conținutul arr este scos. arr = ["a", "b"] arr.push (funcție () (alertă (aceasta))) arr () // "a", "b", funcție

Sparse Arrays, descrierea lungimii

Proprietatea lungime 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 matrice rare, cu „goluri” în indici.

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

var fructe = // fructe matrice goale = fructe „piersici” = alertă „măr” (fructe.lungime) // 100 (dar există doar 2 elemente în matrice)

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

var fructe = // fructe matrice goale = fructe „piersici” = alertă „măr” (fructe) //, piersică, măr (sau ceva de genul acesta)

Dar o matrice este un obiect cu două chei. Valorile lipsă nu ocupă spațiu.

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

var fructe = fructe = "Piersici" fructe = "Mere" alertă (fruits.pop ()) // împinge "Apple" (la indexul 9) alert (fruits.pop ()) // împinge un dezactivat (la indexul 8) ) )

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

Eliminarea dintr-o matrice

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

var arr = ["Mergi", "la", "acasă"] șterge arr // acum arr = ["Mergi", nedefinit, "acasă"] alertă (arr) // nesetat

Puteți vedea că valoarea este eliminată, dar nu așa cum ne-am dori, deoarece matricea conține un nesetat.

Operatorul de ștergere șterge o pereche cheie-valoare și asta este tot. Desigur, deoarece o matrice este doar un hash, poziția elementului eliminat devine nedefinită.

De cele mai multe ori, trebuie să eliminăm 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 splice poate elimina și înlocui elemente din matrice multidimensionale JavaScript. Sintaxa sa este:

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

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

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

var arr = ["Go", "to", "home"] arr.splice (1, 1) // elimină 1 element începând de la indexul 1 alertă (arr.join (",")) // ["Go " ," acasă "] (1 articol eliminat)

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

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

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

Metoda splice returnează o matrice a elementelor eliminate:

var arr = ["Mergi", "la", "acasă", "acum"]; // eliminați primele 2 elemente var removed = arr.splice (0, 2) alertă (eliminat) // „Mergeți”, „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 folosi, de asemenea, un index negativ, care este numărat de la sfârșitul matricei:

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

Temă de auto-studiu

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

var obj = (className: „meniu deschis”)

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 JavaScript de obiecte și apoi atașată înapoi la sfârșit.

Să optimizăm puțin acest lucru:

funcția removeClass (elem, cls) (pentru (var c = elem.className.split (""), i = c.length-1; i> = 0; i--) (dacă (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 indice.

Bucla în sine rulează în direcția opusă, terminând cu condiția i> = 0. Acest lucru se datorează faptului că i> = 0 este testat mai repede decât i. Ceea ce accelerează 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ățare", "JavaScript"]; var arr2 = arr.slice (0,2) // preia 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 acesta.

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

var arr = ["De ce", "învață", "JavaScript"]; var arr2 = arr.slice (1) // acceptă toate elementele care încep cu 1 alertă (arr2.join (",")) // „learn, JavaScript”

Metoda acceptă indici 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 poți face:

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

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

Puteți efectua apeluri mai lungi, cum ar fi 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ă.

Ziua bună tuturor. Alexey Gulynin este în legătură. În ultimul articol, am analizat construcția switch case în javascript. În acest articol, aș vrea să vă spun ce este matrice în Javascript... Noțiunea de matrice joacă un rol important nu numai în Javascript, ci și în toată programarea. O variabilă, cum ar fi o matrice, conține nu un element, ci mai multe. Sintaxa pentru crearea unui tablou este următoarea:

Var mas = nou Array (valoare1, valoare2, ..., valoareN);

În acest caz, se creează o variabilă mas de tip matrice cu valorile indicate în paranteze. Vă rugăm să rețineți că matricea este creată folosind noul cuvânt cheie. Vă puteți referi la elementele unei matrice specificând numele matricei și indexul matricei între paranteze drepte. Indicele matricei este bazat pe zero. Să dăm un exemplu de matrice cu 4 elemente și să ieșim 2 elemente:

Dacă punem mas, va tipări „privet”, deoarece indexarea matricei începe de la zero. Să ne dăm seama acum cum să afișam toate elementele unui tablou. Pentru a face acest lucru, trebuie să utilizați o buclă. Pe lângă cunoașterea buclelor în Javascript, trebuie să cunoașteți proprietatea de lungime a matricelor, care returnează numărul de elemente dintr-o matrice (sau, cu alte cuvinte, lungimea acesteia). Să tipărim lungimea matricei mas:

Ieșirea tuturor elementelor unui tablou:

Până acum, ne-am uitat la tablouri unidimensionale. În general, tablourile pot fi multidimensionale. Principalul lucru este să înțelegeți că, de exemplu, o matrice bidimensională este o matrice ale cărei elemente sunt matrice. Să analizăm următoarea problemă cu dvs.: trebuie să creați o matrice bidimensională 3 cu 3, ale cărei elemente sunt stabilite de utilizator și să afișați această matrice. Aici vom folosi operatorul prompt pentru a solicita utilizatorului un număr:

În cazul nostru, o matrice bidimensională corespunde (de exemplu) următoarei structuri: mas = [,,]. Puteți vedea că matricea are 3 elemente, fiecare dintre ele fiind o matrice în sine.

Inițial, sarcina lui Javascript a fost să creeze site-uri dinamice. În practica mea, nu am folosit nicăieri matrice bidimensionale, doar unidimensionale, așa că cunoștințele despre matrice pe care le-ați primit din acest articol vor fi destul de suficiente. Într-unul dintre articolele următoare, voi vorbi despre obiectul Array, proprietățile și metodele acestuia.

În JavaScript, matricele multidimensionale sunt matrice de matrice. Pentru a accesa un element al, de exemplu, o matrice bidimensională, trebuie să specificați un operator de două ori.

Să presupunem că matricea variabilă este o matrice de matrice de numere întregi. Fiecare dintre elementele matricei [j] este o matrice de numere. Pentru a ne referi la un număr separat, folosim notația: matrice [j] [k].

Exemplu. Să folosim o matrice bidimensională pentru a crea tabelul de înmulțire.

var matrice = nou Array (10); // există 10 linii în matrice

pentru (var j = 0; j< matrix.length; j++)

matrice [j] = nou Array (10); // d fiecare linie a creat 10 coloane

pentru (var rând = 0; rând< matrix.length; row++) {

pentru (col = 0; col< matrix .length; col++) {

matrice = rând * col; // umplerea elementelor matricei

var rezult = matrice; // rezultatul înmulțirii 24

O utilizare tipică a unei matrice 2D în JavaScript este de a crea o serie de opțiuni de meniu personalizate. Să presupunem că unele dintre opțiunile din meniul principal corespund opțiunilor dintr-un submeniu derulant. Să creăm o matrice a cărei lungime se potrivește cu numărul de opțiuni din meniul principal. Elementele acestui tablou vor fi matrice cu numele opțiunilor corespunzătoare acestora din submeniu.

meniu = nou Аrrаy ();

meniu = nеw Аrrаy ("Opțiunea 1.1", "Opțiunea 1.2", "," Opțiunea 1.3 ");

mеnu = nеw Аrrаy ("Opțiunea 2.1", "Opțiunea 2. 2");

meniu = nou Аrrаy ("Opțiunea 3.1", "Opțiunea 3.2", "Opțiunea 3.3", "Opțiunea 3.4");

Pentru a accesa prima opțiune a celui de-al doilea submeniu, trebuie să scrieți:

meniu // valoarea este „Opțiunea 2.1”;

Să modificăm construcția matricei astfel încât să conțină atât numele opțiunilor din meniul principal, cât și ale opțiunilor submeniului:

meniu = nou Аrrау ()

meniu = nou Arrau („Meniu1”, „Meniu2”, „Meniu3”);

meniu = nou Аrrау ();

meniu = noua matrice („Opțiunea 1.1”. „Opțiunea 1.2”, „Opțiunea 1.3”);

meniu = nou Arrau („Opțiunea 2.1”, „Opțiunea 2. 2”);

meniu = nou Array („Opțiune 3.1”, „Opțiune 3. 2”, „Opțiune H.3”, „Opțiune 3.4”);

meniu // valoarea este „Meniu2”

meniu // valoarea este „Meniu3”

meniu // valoarea este „Opțiunea 2.1”

meniu // valoarea este „Opțiunea 3.2”

Metode de matrice

În această secțiune, vom lua în considerare metodele cu care puteți manipula elementele matricei.

a te alatura () - o metodă care convertește fiecare dintre elementele matricei într-un șir și le concatenează. Un șir opțional poate fi specificat ca argument pentru metoda de separare a elementelor individuale din șirul rezultat. Dacă nu specificați un separator, separatorul implicit este o virgulă.

var arr =; // dat un tablou de trei elemente

var str = arr.join (); // valoarea str este „12,23,38”

str = arr.join (";"); // str == "12; 23; 38"

După cum sa menționat mai devreme, metoda Array.join () este inversul metodei String.split (), care împarte șirurile în elemente de matrice.

invers () - o metodă care inversează ordinea elementelor dintr-o matrice. Această metodă nu creează o nouă matrice, ci le schimbă ordinea în matricea originală.

var arr = nеw Аrrау (1,2,3); // arr = 1, arr = 2, arr = 3

arr.reverse (); // arr = 3, arr = 2, arr = 1

var str = arr.jоin (); // str == "3,2,1"

fel () - o metodă care sortează elementele unui tablou în loc și returnează o matrice sortată. Dacă metoda sort () este apelată fără niciun argument, va sorta elementele matricei în ordine alfabetică, transformându-le temporar în valori de șir pentru a efectua o comparație dacă este necesar.

var arr = nеw Аrrаy ("banana", "сherrry", "mere");

var str = arr.join (","); // str == „măr, banană, cireș”

Dacă matricea conține un element nedefinit, acesta este împachetat până la sfârșitul matricei.

Pentru a sorta nu în ordine alfabetică, ci într-o altă ordine, metoda sort () este transmisă ca argument funcției de comparație, a cărei sarcină este să indice regula conform căreia unul dintre cele două argumente ale sale va fi localizat mai devreme în lista sortată. Dacă al doilea trebuie să fie precedat de primul argument, funcția de comparare trebuie să returneze o valoare negativă. Dacă în tabloul sortat primul argument trebuie să-l urmeze pe al doilea, atunci funcția trebuie să returneze un număr pozitiv. Funcția de comparație ar trebui să returneze 0 dacă cele două valori sunt echivalente, adică ordinea lor nu este importantă. Exemplu.

Să sortăm în ordine numerică.

var arr =;

arr.sort (); // în ordine alfabetică: 11111, 2222, 333, 44

arr.sort (funcție (primul, al doilea) (//

întoarcere primul - al doilea; )); // Ordine numerică: 44, 333, 2222, 11111

Este convenabil să folosiți un literal funcțional în acest fragment de cod, deoarece funcția de comparare va fi apelată o dată și nu este nevoie să o denumiți.

Prin definirea altor funcții de sortare, puteți efectua o mare varietate de metode de sortare.

concat () - o metodă care creează și returnează o nouă matrice care conține elementele matricei originale, completată cu valorile tuturor argumentelor specificate în metoda concat (). În cazul în care argumentul în sine este o matrice, elementele sale vor fi adăugate la tabloul rezultat. Dar, trebuie remarcat faptul că recursiunea nu este efectuată atunci când se împarte matrice de matrice.

var arr =;

arr.concat (4, 5) // rezultat

arr. concat (); // rezultat

arr. concat (,) // rezultat

arr. concat (4,]) // rezultat]

felie () - o metodă care returnează un subbary (fragment) din tabloul original. Metoda are două argumente care indică începutul și sfârșitul subbaryului returnat. Tabloul returnat va conține elemente începând de la cel al cărui index este indicat de primul argument, până la elementul al cărui index este indicat de al doilea argument, dar fără a-l include.

Dacă specificați un singur argument, matricea returnată conține elemente de la poziția specificată de argument până la sfârșitul matricei. Un argument negativ specifică numărul elementului de matrice de la sfârșitul matricei.

var arr =;

arr.slice (0,3); // va reveni

arr. felie (3); // va reveni

arr. felie (1, -1); // va reveni

arr. felie (-3, -2); // va reveni

îmbinare () - o metodă universală care poate fi folosită pentru a adăuga și elimina elemente dintr-o matrice sau pentru ambele operații în același timp. Ca rezultat al operațiunii metodei, matricea originală este schimbată.

În metoda splice (), primul argument specifică indexul matricei la care va începe ștergerea și/sau inserarea, al doilea argument specifică numărul de elemente de eliminat. Dacă omiteți al doilea argument, atunci elementele matricei vor fi eliminate, începând de la poziția specificată de primul argument al metodei și până la sfârșitul matricei. Returnează metoda splice (). serie de elemente eliminate. Dacă al doilea argument este 0, metoda va returna o matrice goală.

var arr =;

arr.splice (4); // va reveni; arr devine egal

arr.splice (1,2); // va reveni; arr devine egal

Două argumente pentru metoda splice (), care specifică elementele matricei care trebuie eliminate, pot fi urmate de orice cantitate argumente suplimentare care specifică elementele de inserat în matrice, începând cu indexul specificat de primul argument al metodei.

var arr =;

arr.splice (2,0, "ab", "cd"); / * va reveni; arr devine * /

îmbinare (2,2,, 3); / * va returna ["ab", "cd"]; arr devine, 3,33,44,55] * /

Rețineți că metoda splice () nu împarte argumentele matricei în elemente separate care trebuie inserate, ci mai degrabă inserează matricea în sine.

apăsați () și pop () - metode care permit utilizarea matricelor ca stive. Metoda push () adaugă elemente noi la sfârșitul matricei și returnează noua lungime a matricei. Metoda pop () elimină ultimul element din matrice și returnează valoarea ștearsă ca rezultat.

Ambele metode modifică matricea originală. Când utilizați o combinație a metodelor push () și pop () în JavaScript, puteți utiliza o matrice pentru a crea o stivă cu o regulă de serviciu primul întrat, ultimul ieșit.

var stаk =; // stiva goală

stivă.împinge (1,2); // matrice: va returna 2

grămadă. pop (); // matrice: va returna 2

stivă.împinge (3); // matrice: va returna 2

stak.рр (); // matrice: va returna 3

stivă.împinge (); // matrice:] va returna 2

grămadă. pop () // matrice: va reveni

grămadă. pop (); // matrice: va returna 1

unshift () și shift () - metode care funcționează aproape la fel ca push () și pop (), dar nu inserează și elimină elemente la sfârșitul matricei, ci la început.

Metoda unshift () adaugă unul sau mai multe elemente la începutul matricei, compensând elementele până la sfârșitul matricei și returnează noua lungime a matricei. Metoda shift () este folosită pentru a elimina primul element al unui tablou, returnează elementul eliminat.

var arr =; // arr:

arr.unshift (1); // arr: va returna 1

arr.unshift (22); // arr: va returna 2

arr.shift (); // arr: va returna 22

arr.unshift (3,); // arr:, 1] va returna 3

arr.shift (); // arr: [, 1] va returna 3

arr.shift (); // arr: se va întoarce

arr.shift (); // arr: va returna 1

La apelarea metodei unshift () cu mai multe argumente, aceste argumente sunt inserate dintr-o dată, mai degrabă decât pe rând, așa cum se face în metoda splice (). Adică, în tabloul rezultat, valorile vor fi aranjate în aceeași ordine în care au fost scrise în lista de argumente când a fost apelată metoda.

toString () și toLocaleString ()- metode care convertesc fiecare dintre elementele matricei într-un șir și afișează o listă separată prin virgulă a șirurilor primite. Metoda toString (), după cum s-a menționat, este disponibilă pentru orice obiect din JavaScript, inclusiv pentru o matrice. Rețineți că metodele nu lasă paranteze pătrate sau orice alți separatori în jurul valorilor matricei.

ToString () // va returna „1,2,3”

["a", "b", "c"]. toString () // va returna "a, b, c"

] .toString () // va returna „1,2, s”

Metoda toString () va returna același șir ca și metoda join () dacă este apelată fără parametri.

toLocaleString () - O metodă care concatenează șirurile rezultate folosind un delimitator specific regiunii.

Exemplul 1. Crearea unui banner ciclic (slideshow).

Să creăm o serie de imagini care vor apărea pe pagină la anumite intervale.

Schimbați imaginile

Exemplul 2. Ieșirea unui aforism aleatoriu pe pagină. Un aforism aleatoriu apare de fiecare dată când pagina este reîmprospătată.

Aforism aleatoriu pe pagină

Data obiect

În JavaScript, obiectul Date este proiectat să funcționeze cu valori de dată și oră. Un obiect este instanțiat de constructorul Date () folosind operatorul new.

var new_day = new Date ();/ * A fost creată o instanță a obiectului, care stochează informații despre ora și data curente (citește ora sistemului computerului). * /

var Crăciun = nou Data (2016, 11, 25);/ * A creat o instanță de obiect cu data Crăciunului. Numerele lunii sunt numărate de la zero, deci decembrie este numerotat 11 în ordine * /

Metodele definite pe obiectul Date () vă permit să setați și să stocați diferite valori de oră și dată și să efectuați o serie de acțiuni asupra acestora folosind fie ora locală, fie Greenwich Mean Time (GMT).

Christmas.setFullYear (xmas.getFullYear () + 1);/ * Data Crăciunului de anul viitor * /

var weekdau = Christmas.getDay ();// Ziua săptămânii de Crăciun.

document.write ("Astăzi:" + new_day.toLocaleString ());// Valoarea șirului de date și ore curente.

În JavaScript, pentru obiectul Date (), funcțiile sunt definite (nu sunt apelate prin obiectul Date (), prin urmare, nu metode, ci funcții) pentru a converti o dată, care este specificată sub formă numerică sau ca șir, într-un reprezentare în milisecunde, care este folosită în unele operațiuni cu date.

Constructorul la crearea unei noi instanțe a obiectului Date () poate fi utilizat în următoarele moduri:

noua dată ();/ * Constructorul Date () fără argumente creează un obiect a cărui valoare este egală cu data și ora curente. * /

noua dată (număr_milisecunde);/ * Singura valoare numerică este specificată în constructor, este folosită ca reprezentare a datei în milisecunde, care este aceeași cu valoarea returnată de metoda getTime (). * /

data noua (data_string_reprezentare);/ * Dacă un singur argument șir este specificat în constructor, acesta este tratat ca o reprezentare șir a datei în formatul pe care metoda Date.parse () îl acceptă. * /

data noua (an, luna, zi, ore, minute, secunde, milisecunde);/ * Constructorul poate fi transmis de la două până la șapte argumente numerice care specifică câmpurile individuale de dată și oră. În afară de primele două câmpuri care indică anul și luna, toate celelalte argumente sunt opționale. * /

Data () poate fi apelată ca funcție fără a specifica noul operator. În acest caz, orice argument transmis este ignorat și data și ora curente sunt returnate.

Să indicăm ce valori pot lua argumentele atunci când folosim diferite forme ale constructorului:

număr_milisecunde este numărul de milisecunde dintre data dorită și miezul nopții de 01 ianuarie 1970 UTC. Să spunem, dacă argumentul este 5000, va fi creată o dată care reprezintă cinci secunde după miezul nopții 01/01/1970.

date_string_representation - argumentul specifică data și ora opțională ca șir. Șirul trebuie specificat într-un format pe care metoda Date.parse () îl înțelege.

an - patru cifre ale anului. Pentru compatibilitate cu implementările anterioare JavaScript, dacă valoarea argumentului este între 0 și 99, numărul 1900 este adăugat la valoarea sa.

ziua este un număr întreg de la 1 la 31 reprezentând ziua lunii. Argumentul este optional.

ore este un număr întreg de la 0, ceea ce înseamnă miezul nopții, la 23. Acest argument este opțional.

minute este un număr întreg de la 0 la 59. Acest argument este opțional.

secunde. Secunde în minute, specificate ca un număr întreg de la 0 la 59. Argument opțional.

milisecunde este numărul de milisecunde, specificat ca număr întreg, cuprins între 0 și 999. Acest argument este opțional.

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

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

Cum sunt create matricele multidimensionale și pentru ce sunt acestea?

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 imbricate.

Luați în considerare următoarea situație. La începutul unui joc, utilizatorul își introduce numele, iar după sfârșit, pe ecran este afișat un tabel de rating 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 subbary 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 în mod eterogene. Poate fi șiruri, numere și chiar. Acest lucru este posibil deoarece tablourile din sunt netipizate.

În acest caz, accesul la elemente se face printr-un operator dublu.

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

Rezultate =

Matricele sunt o modalitate destul de convenabilă de a stoca date complexe comandate în timpul procesării lor. În plus, este foarte convenabil să lucrezi cu ei și, în același timp, viteza de procesare a acestora este destul de mare.

Metode de sortare a datelor

Pentru tablourile în 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, aceasta ordonează automat sub-tabele după primul element în ordine alfabetică. Deci, când suni rezultate.fel () obiectul analizat va arăta astfel:

Alexei, 124 de ani

Markus, 333

Natasha, 211

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

124, Alexey

211, Natasha

333, Markus

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

Dacă, pentru a rezolva o problemă specifică, aveți nevoie de o funcție care sortează elementele într-un mod nestandard, atunci o puteți scrie singur și o puteți transmite ca parametru către fel ()... Trebuie remarcat faptul că o funcție definită de utilizator trebuie să returneze:

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

Ca exemplu, să luăm matricea inițială rezultate sortați 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ă. in situatia in care este necesar sa returnez un numar pozitiv, returnez unul negativ si invers.

Tabelul de înregistrare:

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

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

1 2 3 4 5 funcția RecordSort (a, b) (dacă (a> b) returnează 1; altfel dacă (a< b) return -1; else return 0; }

funcția RecordSort (a, b) (dacă (a> b) returnează 1; altfel dacă (a< b) return -1; else return 0; }

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

Concluzia se face într-un mod similar.

Vreau să vă atrag atenția asupra unui punct important. Când utilizați aceste funcții, toate modificările au loc asupra matricei la care le aplicați. Astfel, dacă trebuie să păstrați forma originală a datelor, atunci creați o copie și apoi editați-o.

Ei bine, așa că am vorbit despre matrice multidimensionale și sortarea lor. Dacă ți-a plăcut articolul, atunci 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 stima, Roman Chueshov