Многоизмерни масиви в JavaScript. Двуизмерен масив в JavaScript Javascript масив многоизмерен

В тази статия ще разгледаме стандартните числово индексирани масиви на JavaScript. Масивите се декларират с помощта на квадратни скоби:

var плодове = ["Apple", "Orange", "магаре"]

За да извлечете елемент, поставете неговия индекс в квадратни скоби. Първи индекс 0:

var fruit = ["Apple", "Orange", "Donkey"] предупреждение (плодове) предупреждение (плодове) предупреждение (плодове)

Можем също така да получим дължината на JavaScript масив:

var плодове = ["Apple", "Orange", "Donkey"] предупреждение (плодове.дължина)

Опа! Създадохме масив с два плода и магаре. Сега трябва да махнем магарето.

Поп и push методи

Поп методът в JavaScript премахва елемент от масив и го връща.

Следният пример показва как Donkey се извлича от масив:

var fruit = ["Apple", "Orange", "Donkey"] предупреждение ("Изтривам" + fruit.pop ()) // Сега имаме само предупреждение ["Apple", "Orange"] ("Сега размерът на масива: "+ плодове.дължина) // магаре премахнато

Обърнете внимание, че pop променя самия масив.

Аналогът на pop е методът push, който добавя елемент към масив. Например, забравихме да добавим праскова:

var плодове = ["Apple", "Orange"] плодове.push ("Праскова"); // сега имаме предупреждение ["Apple", "Orange", "Peach"] ("Последен елемент:" + плодове)

  1. Създайте масив от стилове с елементи “ Джаз”, “Блус”;
  2. Добавете стойността " Рокендрол«;
  3. Заменете втората стойност от края с " Класически". Трябва да завършите с масив: „ Джаз”, ”Класически”, ”Рокендрол”. Кодът трябва да работи за всяка дължина на масива;
  4. Извлечете последната стойност от масива и я предупредете.

Решение

// 1 var styles = ["Jazz", "Bluez"] // 2 styles.push ("Rock" n "Roll") // или: styles = "Rock" n "Roll" // 3 styles = "Classic "// 4 предупреждение (styles.pop ())

Методи за смяна / отместване

Методите shift / unshift работят в края на масива, но можете също да използвате shift, за да изместите елементи нагоре ( първата стойност на масива се премахва с изместване на елементите). Методът unshift позволява на JavaScript да добавя елемент към масив от края:

var fruit = ["Apple", "Orange"] var apple = fruit.shift () // сега имаме само ["Orange"] плодове.unshift ("Lemon") // сега имаме ["Lemon", " Оранжев "] сигнал (плодове.дължина) // 2

Shift и unshift могат да работят върху няколко елемента едновременно:

var Плодове = ["Ябълка"] плодове.push ("Оранжево", "Праскова") плодове.unshift ("Ананас", "Лимон") // сега масивът изглежда така: ["Ананас", "Лимон", „Ябълка“, „портокал“, „праскова“]

Задача за самостоятелно изучаване

Напишете код за показване на произволна стойност от масива arr чрез предупреждение:

var arr = ["Слива", "Портокал", "Магаре", "Морков", "JavaScript"]

Забележка: Кодът за получаване на произволно число от минимална до максимална стойност (включително) е следният:

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

Решение

Трябва да извлечем произволно число между 0 и arr.length-1 (включително):

var arr = ["Слива", "Оранжево", "Магаре", "Морков", "JavaScript"] var rand = Math.floor (Math.random () * arr.length) предупреждение (arr)

Итерация над масив

В JavaScript итерацията над масив се извършва с цикъл for:

var плодове = ["Ананас", "Лимон", "Ябълка", "Портокал", "Праскова"] за (var i = 0; i

Задача за самостоятелно изучаване

Създайте функция find (arr, value), която намира стойност в даден масив и връща неговия индекс, или -1, ако не е намерена стойност.

Например:

arr = ["тест", 2, 1.5, невярно] find (arr, "test") // 0 find (arr, 2) // 1 find (arr, 1.5) // 2 find (arr, 0) // -1

Решение

Възможно решение може да изглежда така:

функция find (масив, стойност) (за (var i = 0; i

Но това не е вярно, защото == не показва разликата между 0 и невярно.

По -правилно е да използвате === при работа с масиви в JavaScript. В допълнение, най -новият стандарт ES5 съдържа функцията Array # indexOf. С негова помощ можем да дефинираме функция, както следва:

функция find (масив, стойност) (ако [array.indexOf) връща array.indexOf (стойност) за (var i = 0; i

Би било още по -умно да дефинирате find чрез условие, за да проверите дали методът indexOf съществува.

Задача за самостоятелно изучаване

Създайте функция filterNumeric (arr), която приема масив и връща нов масив, съдържащ само числовите стойности от arr.

Пример за това как трябва да работи:

arr = ["a", 1, "b", 2]; arr = filterNumeric (arr); // сега arr =

Решение

Решението е да преминете през масив и да добавите стойности към новия масив, ако те са числови.

присъединете и разделете

Понякога се нуждаете от бърз начин да конвертирате JavaScript масив в низ. Това е методът на присъединяване.

Той обединява масива в низ, като използва посочения разделител:

var плодове = ["Лимон", "Ябълка", "Портокал", "Праскова"]; var str = fruit.join (","); alert (str);

Обратното преобразуване лесно се извършва с метода на разделяне:

var плодове = "Ябълка, портокал, праскова"; var arr = fruit.split (","); // arr сега съдържа предупреждение ["Apple", "Orange", "Peach"] (arr);

Задача за самостоятелно изучаване

Обектът включва свойство className, което съдържа имената на класовете, разделени с интервали:

Напишете функция addClass (obj, cls), която добавя класа cls, но само ако не съществува:

ddClass (obj, "new") // obj.className = "отворено меню new" addClass (obj, "open") // няма промени (класът вече съществува) addClass (obj, "me") // obj.className = предупреждение за „отворено меню ново аз“ (obj.className) //

Решение

Трябва да разделите className и цикъла на части. Ако класът не е намерен, той се добавя.

Цикълът е леко оптимизиран, за да се увеличи производителността:

функция addClass (elem, cls) (за (var c = elem.className.split (""), i = c.length-1; i> = 0; i--) (ако (c [i] == cls ) return) elem.className + = "" + cls) var obj = (className: "отворено меню") addClass (obj, "нов") addClass (obj, "отворен") сигнал (obj.className) // отворено меню нов

В горния пример променливата c е дефинирана в началото на цикъла и последният й индекс е зададен на i.

Самият цикъл се обработва в обратна посока, завършвайки с условието i> = 0. Тъй като i> = 0 се проверява по -бързо от i. Което в JavaScript прави търсенето в масив по -бързо.

Използване на дължина за изрязване на масив

Използвайки свойството length, можете да изрежете масив по следния начин:

Вие давате дължината, а браузърът отрязва масива.

Масивът е обект, което означава

Всъщност в JavaScript Array е обект, пълен с автоматична настройка на дължината и специални методи.

Това се различава от концепцията в други езици, където масивите представляват непрекъснат сегмент от паметта. Това също е различно от свързан списък, базиран на опашка или стек.

Нецифрени ключове на масива

Ключовете са числа, но те могат да имат всяко име:

arr = arr = 5 arr.prop = 10 // не правете това

В JavaScript масивите са хеш таблици с техните предимства, но и недостатъци.

Например, push / pop работи само върху най -външните елементи на масива, така че те са невероятно бързи.

push работи само в края:

var arr = ["Моят", "масив"] arr.push ("нещо") сигнал (arr) // низ "масив"

Методите shift / unshift са бавни, защото трябва да преномерират целия масив. Методът на снаждане може също да промени номерацията:

По този начин изместването / отместването е по -бавно от натискането / изскачането. Колкото по -голям е масивът, толкова повече време отнема JavaScript за сортиране на масива.

Задача за самостоятелно изучаване

Какъв ще бъде резултатът? Защо?

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

Решение

Тъй като масивите са обекти, обр ..всъщност е извикване на метод на обект като obj метод:

arr () // същото като arr () // синтактично погрешно, но концептуално същото: arr.2 () // преписано в същия стил като obj.method () this = arr в този случай се предава на функцията, така че съдържанието на arr се извежда. arr = ["a", "b"] arr.push (function () (alert (this))) arr () // "a", "b", function

Рядки масиви, описание на дължината

Свойството length ви позволява да получите не размера на масива в JavaScript, а последния индекс + 1. Това е важно, когато става въпрос за оскъдни масиви, с „пропуски“ в индексите.

В следния пример ще добавим два елемента към празни плодове, но дължината остава 100:

var плодове = // празен масив плодове = "праскова" плодове = "ябълка" предупреждение (плодове.дължина) // 100 (но има само 2 елемента в масива)

Ако се опитате да изведете рядък масив, браузърът ще покаже липсващите индекси като празни елементи:

var Плодове = // празен масив плодове = "праскова" плодове = "ябълка" предупреждение (плодове) //, праскова, ябълка (или нещо подобно)

Но масивът е обект с два ключа. Липсващите стойности не заемат място.

Разредените масиви се държат странно, когато към тях се прилагат методи на масиви. Те нямат представа, че индексите липсват:

var плодове = плодове = "праскова" плодове = "ябълка" предупреждение (fruit.pop ()) // натиснете "ябълка" (при индекс 9) предупреждение (плодове.pop ()) // изтласкване на неустановено (при индекс 8 )

Опитайте се да избягвате редки масиви. Както и да е, техните методи няма да работят добре. Вместо това използвайте Object.

Премахване от масив

Както знаем, масивите са обекти, така че можем да използваме delete, за да изтрием стойността:

var arr = ["Go", "to", "home"] изтриване на arr // сега arr = ["Go", undefined, "home"] alert (arr) // не е зададено

Можете да видите, че стойността се премахва, но не по начина, по който бихме искали, защото масивът съдържа неопределен елемент.

Операторът delete изтрива двойка ключ-стойност и това е всичко. Естествено, тъй като масивът е само хеш, позицията на премахнатия елемент става неопределена.

По -често трябва да изтриваме елемент, без да оставяме никакви „дупки“ между индексите. Има и друг метод, който ще ни помогне в това.

Метод на снаждане

Методът на снаждане може да премахва и заменя елементи в многоизмерни масиви на JavaScript. Неговият синтаксис е:

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

Изтрива елемента deleteCount, започващ от index и след това вмъква elem1,…, elemN на негово място.

Нека да разгледаме няколко примера:

var arr = ["Go", "to", "home"] arr.splice (1, 1) // премахване на 1 елемент, започващ от индекс 1 предупреждение (arr.join (",")) // ["Go" , "home"] (1 елемент е премахнат)

По този начин можете да използвате splice, за да премахнете един елемент от масива. Номерата на елементите на масива се изместват, за да запълнят празнината:

var arr = ["Go", "to", "home"] arr.splice (0, 1) // премахване на 1 елемент, започвайки от индекс 0 alert (arr) // "до" стана първият елемент

Следният пример показва как да замените елементите:

Методът на снаждане връща масив от премахнатите елементи:

var arr = ["Отиди", "до", "у дома", "сега"]; // премахване на първите 2 елемента var отстранен = arr.splice (0, 2) сигнал (премахнат) // "Go", "to"<-- массив удаленных элементов splice может вставлять элементы, задайте 0 для deleteCount. var arr = ["Go", "to", "home"]; // со второй позиции // удаляем 0 // и вставляем "my", "sweet" arr.splice(2, 0, "my", "sweet") alert(arr) // "Go", "to", "my", "sweet", "home"

Този метод може да използва и отрицателен индекс, който се брои от края на масива:

var arr = // за елемент -1 (предпоследен) // премахнете 0 елемента, // и вмъкнете 3 и 4 arr.splice (-1, 0, 3, 4) alert (arr) // 1,2,3, 4.5

Задача за самостоятелно изучаване

Обектът съдържа свойство className, което съдържа имената на класовете, разделени с интервали:

var obj = (className: "отворено меню")

Напишете функция removeClass (obj, cls), която премахва cls класа, ако е дадена:

removeClass (obj, "отворен") // obj.className = "меню" removeClass (obj, "blabla") // без промени (няма клас за премахване)

Решение

Трябва да разделите className на части и да преминете през тези части. Ако се намери съвпадение, то се премахва от JavaScript масива от обекти и след това се добавя обратно до края.

Нека оптимизираме това малко:

функция 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: "отворено меню") removeClass (obj, "отворен") removeClass (obj, "blabla") сигнал (obj.className) // меню

В горния пример c е зададен в началото на цикъла, а i е настроен на последния му индекс.

Самият цикъл протича в обратна посока, завършвайки с условието i> = 0. Това е така, защото i> = 0 се тества по -бързо от i. Което ускорява търсенето на имот в c.

Метод на филийки

Можете да извлечете част от масив, като използвате метода slice (begin [, end]): var arr = ["Защо", "научете", "JavaScript"]; var arr2 = arr.slice (0,2) // приема 2 елемента, започващи от 0 alert (arr2.join (",")) // "Защо, научете се"

Имайте предвид, че този метод не променя броя на елементите в масива в JavaScript, но копира част от него.

Можете да пропуснете втория аргумент, за да получите всички елементи, започвайки от определен индекс:

var arr = ["Защо", "научете", "JavaScript"]; var arr2 = arr.slice (1) // приема всички елементи, започващи с 1 сигнал (arr2.join (",")) // "научете, JavaScript"

Методът поддържа отрицателни индекси, точно като String # slice.

Обратен метод

Друг полезен метод е обратният. Да предположим, че искам да получа последната част от домейна, например „ com"От" my.site.com”. Ето как можете да го направите:

var domain = "my.site.com" var last = domain.split ("."). обратен () сигнал (последен)

Обърнете внимание, че JavaScript масивите поддържат сложен синтаксис (reverse ()) за извикване на метод и след това извличане на елемент от получения масив.

Можете да правите по -дълги обаждания, като обратно () 0] arr.sort () alert (arr) // 1, 15, 2

Изпълнете горния код. Ще получите поръчката 1, 15, 2. Това е така, защото методът преобразува всичко в низ и използва лексикографския ред по подразбиране.

В предишната статия говорихме за това какво представлява и как да работим с него. В тази статия ще говорим за многоизмерен масив.

Това е масив, който има един или повече елементи, които също са масиви. В зависимост от дълбочината на рекламата, по -специално, тя може да бъде извикана двуизмерен масив(2 нива) триизмерен масив(3 нива) четириизмерен(4 нива) и така нататък.

Най-популярният, след едноизмерен масив, който най-често се използва е двуизмерен масив. Ще го проучим по -подробно.


Както можете да видите, елементите на двуизмерен масив са едномерни масиви. Ако тези едномерни масиви съдържат повече масиви, тогава масивът arr вече би бил триизмерен.

Като пример, нека създадем три прости масива и ги напълним с данни. Ще запълним първото с четни числа, второто с нечетни числа, а третото с някои произволни данни.

// Декларираме три празни масива var evenNumbers = new Array (); // Променлива k - за индекси на масиви дориNumbers var k = 0; var oddNumbers = нов масив (); // Променлива n - за индекси на масива oddNumbers var n = 0; var data = new Array ("кола", "самолет", вярно, 89, "m"); // Попълнете масива evenNumbers, с четни числа за (var i = 1; i

За да видите какво има вътре в масива, можете да използвате такъв инструмент като конзола.

Например, искаме да видим съдържанието на масив с нечетни числа oddNumbers. За да направите това, напишете следния ред в кода по -долу:

Console.log (oddNumbers);

За да видите резултата, трябва да отворите конзола в браузъра... В Google Chrome това става по следния начин: щракнете с десния бутон върху страницата и от контекстното меню изберете последната опция „Преглед на кода“, тоест инспекторът. В английската версия тази опция се нарича Inspect.


И под лентата с инструменти за програмисти ще се появи. В него трябва да отидете в раздела Конзола.


Сега, за да създайте двуизмерен масив, трябва да го декларирате и да добавите едномерните масиви, които сте създали по-горе.

// Декларираме двуизмерен масив twoDimens и го попълваме var twoDimens = new Array (evenNumbers, oddNumbers, data); console.log (twoDimens);

Нека видим съдържанието на този масив в конзолата.


итерация над двуизмерен масив

Първо, нека се научим как да получите достъп до елементите на двуизмерен масив.

Както при единичните масиви, елементите се осъществяват чрез техните индекси.

Например, нека покажем елемента в индекс 3 от масив с нечетни числа (oddNumbers). Индексът на едномерния масив oddNumbers в двуизмерния масив twoDimens е един (1).

Document.write ("Елементът с индекс 3 от масива от нечетни числа oddNumbers е:" + twoDimens); // Елемент: 7

В масива twoDimens се позоваваме на елемента в индекс 1. Елементът в този индекс е масивът oddNumbers. И в този масив вече имаме достъп до елемента с индекс 3, който е номер 7.

А сега да преминем към самия въпрос как да повторите двуизмерен масив.

Цикълът над двуизмерен масив се извършва с помощта на двоен цикъл. Например, нека повторим нашия масив twoDimens.

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

Елемент с индекс " + i +" " + j +"е равно на: " + дваDimens [i] [j] +"

"); } }

В първия цикъл преглеждаме самия масив twoDimens. Във втория цикъл вече правим итерация над самия елемент (масив). Първо, променливата i е равна на 0. Следователно, във втория цикъл първо правим повторение на първия масив evenNumbers, който има индекс 0. И вече във втория цикъл имаме достъп до елементите на този масив. Така: twoDimens [j]. Където j варира от 0 до дължината на масива evenNumbers.

След повторение на елементите от първия масив, се връщаме към първия цикъл, увеличаваме променливата i и пристъпваме към повторение през втория масив oddNumbers, който има индекс 1. И така правим повторение над всеки елемент от двуизмерния масив два размера.

Нека сега разгледаме резултата от това търсене:


Това е всичко, за което исках да говоря в тази статия. Сега знаете как да създадете двуизмерен масив, как да получите достъп до елементите на двуизмерен масив и как да повторите двуизмерен масив. Надявам се всичко да е било ясно. Желая ви голям успех!

Масиви

Масиве подредена колекция от стойности. Стойностите в масив се наричат ​​елементи и всеки елемент се характеризира с числова позиция в масива, наречена индекс. Масивите в JavaScript са нетипизирани: елементите на масив могат да бъдат от всякакъв тип, а различните елементи от един и същи масив могат да бъдат от различни типове. Елементите от масиви дори могат да бъдат обекти или други масиви, което ви позволява да създавате сложни структури от данни, като например масиви от обекти и масиви от масиви.

Индексите на масиви в JavaScript са базирани на нула и използват 32-битови цели числа-първият елемент на масив има индекс 0. JavaScript масивите са динамични: те могат да растат и да се свиват при необходимост; няма нужда да декларирате фиксирани размери на масиви, когато са създадени, или да преразпределяте памет, когато те се преоразмеряват.

Масивите в JavaScript са специализирана форма на обекти, а индексите на масиви означават малко повече от просто имена на свойства, които случайно са цели числа.

Създаване на масиви

Най-лесният начин за създаване на масив е с литерал, който е прост списък, разделен със запетая, на елементи от масива в квадратни скоби. Стойностите в литерала на масива не трябва да са константи - те могат да бъдат всякакви изрази, включително обективни литерали:

Var празен =; // Празен номер на масив var = =; // Масив с пет числови елемента var misc = [1.1, true, "a",]; // 3 елемента от различни типове + задна запетая var base = 1024; var таблица =; // Масив с променливи var arrObj = [,]; // 2 масива вътре, съдържащи обекти

Литералният синтаксис на масива ви позволява да вмъкнете незадължителна запетая запетая, т.е. литерал [,] съвпада с масив с два елемента, а не с три.

Друг начин за създаване на масив е да извикате конструктора Масив ()... Конструкторът може да бъде извикан по три различни начина:

    Извикайте конструктора без аргументи:

    Var arr = нов масив ();

    В този случай ще бъде създаден празен масив, еквивалентен на литерала.

    Извикайте конструктора с един цифров аргумент, определящ дължината на масива:

    Var arr = нов масив (10);

    В този случай ще бъде създаден празен масив с определена дължина. Тази форма на извикване на конструктора Array () може да се използва за предварително разпределяне на паметта за масив, ако броят на неговите елементи е известен предварително. Имайте предвид, че това не съхранява никакви стойности в масива.

    Изрично посочете стойностите на първите два или повече елемента на масива или един нецифрен елемент в извикване на конструктор:

    Var arr = нов масив (5, 4, 3, 2, 1, "тест");

    В този случай аргументите на конструктора стават стойностите на елементите на новия масив. Използването на литерали на масиви е почти винаги по -лесно, отколкото използването на конструктора Array () по този начин.

Четене и запис на елементи от масива

Достъпът до елементите на масива се осъществява чрез оператора. Трябва да има препратка към масив отляво на скобите. Произволен израз, който връща неотрицателна цяло число, трябва да бъде в скобите. Този синтаксис е подходящ както за четене, така и за запис на стойността на елемент от масив. Следователно всички следните изявления на JavaScript са валидни:

// Създаване на масив с един елемент var arr = ["world"]; // Прочетете елемент 0 var value = arr; // Запишете стойността в елемент 1 arr = 3.14; // Запишете стойността в елемент 2 i = 2; arr [i] = 3; // Запишете стойност към елемент 3 arr = "здравей"; // Прочетете елементи 0 и 2, запишете стойността в позиция 3 arr] = arr;

Нека ви напомня, че масивите са специализиран вид обект. Квадратните скоби, използвани за достъп до елементи на масива, действат абсолютно същите като квадратните скоби, използвани за достъп до свойствата на обект. Интерпретаторът на JavaScript преобразува числовите индекси в скоби в низове - индекс 1 става низ "1" - и след това използва низовете като имена на свойства.

Няма нищо особено в преобразуването на числови индекси в низове: същото може да се направи с обикновени обекти:

Var obj = (); // Създаване на прост обект obj = "one"; // Индексирайте го с цели числа

Особеността на масивите е, че когато се използват имена на свойства, които са неотрицателни цели числа, масивите автоматично определят стойността на свойството дължина... Например, масивът arr е създаден по -горе с един елемент. След това стойностите бяха присвоени на неговите елементи с индекси 1, 2 и 3. В резултат на тези операции стойността на свойството length на масива се промени и стана равна на 4.

Трябва ясно да правите разлика между индекси в масив и имена на свойства на обекти. Всички индекси са имена на свойства, но само свойства с цели числа са индекси. Всички масиви са обекти и към тях можете да добавяте свойства с произволно име. Ако обаче докоснете свойства, които са индекси на масиви, масивите реагират, като актуализират стойността на свойството length, ако е необходимо.

Обърнете внимание, че отрицателните и нецелите числа са разрешени като индекси на масиви. В този случай числата се преобразуват в низове, които се използват като имена на свойства.

Добавяне и премахване на елементи от масив

Вече видяхме, че най -лесният начин да добавите елементи към масив е да присвоите стойности на нови индекси. Можете също да използвате метода, за да добавите един или повече елементи в края на масив push ():

Var arr =; // Създаване на празен масив arr.push ("нула"); // Добавяне на стойност към края arr.push ("един", 2); // Добавяне на още две стойности

Можете също така да добавите елемент в края на масив, като присвоите стойност на елемента arr. За да вмъкнете елемент в началото на масив, можете да използвате метода unshift ()и съществуващите елементи в масива се изместват към по -високите индекси.

Можете да изтриете елементи от масив с помощта на оператора за изтриване, като обикновени свойства на обекти:

Var arr =; изтриване на arr; 2 в обр. // невярно, индекс 2 в масива е неопределен arr.length; // 3: операторът delete не променя свойството length на масива

Премахването на елемент е подобно (но малко по -различно) при определяне на неопределена стойност на този елемент. Обърнете внимание, че прилагането на оператора delete към елемент в масив не променя стойността на свойството length, нито се движи надолу по елементите с по-висок индекс, за да запълни празнотата, оставена след изтриването на елемента.

Освен това е възможно да се премахнат елементи в края на масива, като просто се присвои нова стойност на свойството length. Масивите имат метод поп ()(обратно на push ()), което намалява дължината на масива с 1 и връща стойността на премахнатия елемент. Има и метод shift ()(обратно на unshift ()), което премахва елемента в началото на масива. За разлика от оператора за изтриване, методът shift () измества всички елементи надолу с една позиция под техните текущи индекси.

И накрая, има многоцелеви метод снаждане (), което ви позволява да вмъквате, изтривате и заменяте елементи от масиви. Той променя стойността на свойството length и премества елементите на масива с по -ниски или по -високи индекси, ако е необходимо. Ще обсъдим всички тези методи малко по -късно.

Многоизмерни масиви

JavaScript не поддържа "истински" многоизмерни масиви, но върши добра работа като ги имитира с помощта на масиви от масиви. За достъп до елемент от данни в масив от масиви е достатъчно да използвате оператора два пъти.

Да предположим например, че променливата матрица е масив от масиви от числа. Всеки елемент от матрица [x] е масив от числа. Можете да използвате матрицата на изрази [x] [y] за достъп до конкретно число в масив. По-долу е конкретен пример, при който двуизмерен масив се използва като таблица за умножение:

// Създаване на многоизмерен масив var table = new Array (10); // Има 10 реда в таблицата за (var i = 0; i

Методи за клас масиви

Стандартът ECMAScript 3 дефинира много удобни функции за работа с масиви като част от Array.prototype, които са достъпни като методи на всеки масив. Тези методи ще бъдат представени в следващите подраздели.

Метод Join ()

Методът Array.join () преобразува всички елементи в масива в низове, свързва ги и връща получения низ. Допълнителен аргумент може да бъде предаден на метода с низ, който ще се използва за разделяне на елементите в низа на резултата. Ако не е посочен низ за разделител, се използва запетая. Например следният фрагмент дава резултат в низ "1,2,3":

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

Обратният () метод

Методът Array.reverse () обръща реда на елементите в масив и връща пренареден масив. Пермутацията се извършва директно върху оригиналния масив, т.е. този метод не създава нов масив с пренаредени елементи, а ги пренарежда във вече съществуващ масив. Например следният фрагмент, който използва методите reverse () и join (), води до низ "3,2,1":

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

Метод Sort ()

Методът Array.sort () сортира елементите в оригиналния масив и връща сортирания масив. Ако методът sort () се извика без аргументи, сортирането се извършва по азбучен ред (за сравнение, елементите временно се преобразуват в низове, ако е необходимо). Недефинираните елементи са увити до края на масива.

Можете да предадете функция за сравнение като аргумент за sort (), за да сортирате във всеки друг азбучен ред. Тази функция определя кой от двата си аргумента трябва да е първи в сортирания списък. Ако първият аргумент трябва да предхожда втория, функцията за сравнение трябва да върне отрицателно число. Ако първият аргумент трябва да следва втория в сортирания масив, тогава функцията трябва да върне число, по -голямо от нула. И ако двете стойности са еквивалентни (т.е. техният ред не е важен), функцията за сравнение трябва да върне 0:

Var arr =; arr.sort (); // Азбучен ред: 1111, 222, 33, 4 arr.sort (function (a, b) (// Цифров ред: 4, 33, 222, 1111 return ab; // Връща стойността 0 // в зависимост от сортирането ред а и б)); // Сортиране назад, от най-високата към най-ниската arr.sort (function (a, b) (return b-a));

Забележете колко удобно е да използвате неназована функция в този фрагмент. Функцията за сравнение се използва само тук, така че няма нужда да й давате име.

Методът concat ()

Методът Array.concat () създава и връща нов масив, съдържащ елементите на оригиналния масив, в който е извикан методът concat () и стойностите на всички аргументи, предадени на метода concat (). Ако някой от тези аргументи сами по себе си са масив, неговите елементи се добавят към върнатия масив. Трябва да се отбележи обаче, че няма рекурсивно преобразуване на масив от масиви в едноизмерен масив. Методът concat () не променя оригиналния масив. По -долу са дадени някои примери:

Var arr =; arr.concat (4, 5); // Връща arr.concat (); // Връща arr.concat (,) // Връща arr.concat (4,]) // Връща]

Метод Slice ()

Методът Array.slice () връща парче или подмасив от посочения масив. Двата аргумента на метода определят началото и края на върнатия парче. Върнатият масив съдържа елемента, номериран в първия аргумент плюс всички следващи елементи до (но не включва) елемента, номериран във втория аргумент.

Ако е посочен само един аргумент, върнатият масив съдържа всички елементи от началната позиция до края на масива. Ако някой от аргументите е отрицателен, той посочва номера на елемента спрямо края на масива. Така че аргумент -1 съответства на последния елемент на масива, а аргумент -3 съответства на третия елемент от масива от края. Ето няколко примера:

Var arr =; arr.slice (0.3); // Връща arr.slice (3); // Връща arr.slice (1, -1); // Връща arr.slice (-3, -2); // Ще се върне

Метод splice ()

Методът Array.splice () е общ метод, който вмъква или премахва елементи от масив. За разлика от методите slice () и concat (), методът splice () променя оригиналния масив, в който е извикан. Имайте предвид, че методите splice () и slice () имат много сходни имена, но изпълняват напълно различни операции.

Методът splice () може да премахва елементи от масив, да вмъква нови елементи или да прави и двете едновременно. Елементите на масива се изместват, ако е необходимо, така че след вмъкване или изтриване се формира непрекъсната последователност.

Първият аргумент на метода splice () определя позицията в масива, от която да се вмъкне и / или изтрие. Вторият аргумент определя броя на елементите, които трябва да бъдат премахнати (изрязани) от масива. Ако вторият аргумент е пропуснат, всички елементи на масива от посочения масив до края на масива се премахват. Методът splice () връща масив от премахнатите елементи или (ако нито един от елементите не е премахнат) празен масив.

Първите два аргумента на метода splice () определят елементите на масива, които трябва да бъдат премахнати. Тези аргументи могат да бъдат последвани от произволен брой допълнителни аргументи, определящи елементите, които трябва да бъдат вмъкнати в масива, започвайки от позицията, посочена в първия аргумент.

Var arr =; arr.splice (4); // Връща arr = arr.splice (1,2); // Връща arr = arr.splice (1,1); // Ще се върне; arr = arr =; arr.splice (2,0, "a", "b"); // Ще се върне; arr =

Методите push () и pop ()

Методите push () и pop () ви позволяват да работите с масиви като стекове. Методът push () добавя един или повече нови елементи в края на масива и връща новата му дължина. Методът pop () извършва обратната операция - премахва последния елемент от масива, намалява дължината на масива и връща стойността, която е премахнал. Обърнете внимание, че и двата метода променят оригиналния масив, вместо да създават модифицирано копие от него.

Методите unshift () и shift ()

Методите unshift () и shift () се държат почти по същия начин като push () и pop (), с изключение на това, че вмъкват и премахват елементи в началото на масива, а не в края. Методът unshift () измества съществуващите елементи към по -големи индекси, за да освободи място, добавя елемента или елементите в началото на масива и връща новата дължина на масива. Методът shift () премахва и връща първия елемент от масива, измествайки всички следващи елементи надолу с една позиция, за да заеме свободното място в началото на масива.

Последна актуализация: 09.04.2018

Масивите са предназначени за работа с набори от данни. Изразът new Array () се използва за създаване на масив:

Var myArray = нов масив ();

Има и по -кратък начин за инициализиране на масив:

Var myArray =;

В този случай създаваме празен масив. Но можете също да добавите начални данни към него:

Var people = ["Том", "Алиса", "Сам"]; console.log (хора);

В този случай в myArray ще има три елемента. Графично тя може да бъде представена по следния начин:

Индексите се използват за препратка към отделни елементи на масив. Преброяването започва от нула, тоест първият елемент ще има индекс 0, а последният ще има индекс 2:

Var хора = ["Том", "Алиса", "Сам"]; console.log (хора); // Tom var person3 = хора; // Сам console.log (person3); // Сам

Ако се опитаме да получим достъп до елемент с индекс, по -голям от размера на масива, получаваме недефинирани:

Var хора = ["Том", "Алиса", "Сам"]; console.log (хора); // неопределено

Също така чрез индекса се задават стойностите за елементите на масива:

Var people = ["Том", "Алиса", "Сам"]; console.log (хора); // Том хора = "Боб"; console.log (хора); // Боб

Освен това, за разлика от други езици като C # или Java, можете да инсталирате елемент, който първоначално не е бил инсталиран:

Var people = ["Том", "Алиса", "Сам"]; console.log (хора); // undefined - има само три елемента в масива people = "Bob"; console.log (хора); // Боб

Заслужава да се отбележи, че за разлика от редица езици за програмиране в JavaScript, масивите не са силно въведени, един масив може да съхранява данни от различни типове:

Var обекти = ["Том", 12, вярно, 3,14, невярно]; console.log (обекти);

оператор на разпространение

Операторът за разпространение ... ви позволява да вземате стойности от масив поотделно:

Нека числата =; console.log (... номера); // 1 2 3 4 console.log (числа); //

Операторът за разпространение е посочен преди масива. В резултат на това изразът ... числа ще върне набор от числа, но това няма да е масив, а отделни стойности.

Многоизмерни масиви

Масивите могат да бъдат едномерни и многоизмерни. Всеки елемент в многоизмерен масив може да бъде отделен масив. По-горе разгледахме едноизмерен масив, сега нека създадем многоизмерен масив:

Var номера1 =; // едноизмерен масив var numbers2 = [,]; // двуизмерен масив

Визуално и двата масива могат да бъдат представени по следния начин:

Едномерни числа на масива 1

За да получите един елемент от масив, се използва и индекс:

Var tomInfo = хора;

Само сега променливата tomInfo ще представлява масив. За да получим елемент във вложен масив, трябва да използваме второто му измерение:

Console.log ("Име:" + хора); // Tom console.log ("Възраст:" + хора); // 25

Тоест, ако можем визуално да представим двуизмерен масив под формата на таблица, тогава елементът people ще се позовава на клетката на таблицата, която се намира в пресечната точка на първия ред и втората колона (първото измерение е 0 - ред, второто измерение - 1 - колона).

Можем да изпълним и задачата:

Var хора = [["Том", 25, невярно], ["Бил", 38, вярно], ["Алиса", 21, невярно]]; хора = 56; // присвояваме отделна стойност console.log (хора); // 56 души = ["Боб", 29, невярно]; // присвояване на масив console.log (хора); // Боб

Когато създаваме многоизмерни масиви, не се ограничаваме само до двуизмерни, но можем да използваме и масиви с големи размери:

Var номера =; числа =; // сега числата са двуизмерен масив числа =; // сега числата са триизмерен масив числа = 5; // първият елемент от 3D масива е 5 console.log (числа);

Поздрави на всички, които се интересуват от многоизмерни масиви и сортиране на JavaScript. В настоящата публикация ще се опитам да обхвана тази тема с всички подробности.

Следователно, след като прочетете тази статия, ще научите защо многомерните масиви се използват в уеб приложенията, как се създават и как могат да бъдат манипулирани и сортирани. Нека се заемем с ученето!

Как се създават многоизмерни масиви и за какво са те?

Като начало си струва да си припомним как се създава обикновен едноизмерен масив.

var array =

Сега не забравяйте, че многоизмерният масив е масив от масиви.Съгласен съм, звучи като тавтология. Прочетете обаче определението отново. Наистина, многоизмерен масив се състои от определен брой вложени.

Помислете за следната ситуация. В началото на играта потребителят въвежда името си, а след края на таблицата за рейтинг с имената на играчите и техните записи се показва на екрана.

Ясно е, че такава информация се съхранява в база данни. Но когато го извадим от базата данни, получаваме многоизмерен масив. В края на краищата всеки подмасив съдържа данните за вход на играча и броя на отбелязаните точки.

Всичко ще изглежда така:

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

Както можете да видите, информацията може да се съхранява хетерогенна. Това могат да бъдат низове, числа и дори. Това е възможно, защото масивите в са нетипизирани.

В този случай достъпът до елементи се осъществява чрез двоен оператор.

За да консолидирате материала, анализирайте малка програма.

Резултати =

Масивите са доста удобен начин за съхраняване на подредени сложни данни, докато ги обработвате. Освен това е много удобно да се работи с тях и в същото време скоростта на тяхната обработка е доста висока.

Методи за сортиране на данни

За масиви в JavaScript има вграден метод, наречен вид ()... Този инструмент е много гъвкав. И сега ще обясня защо.

Ако използвате метод без параметри, той автоматично подрежда подмасивите по първия елемент по азбучен ред. Така че, когато се обаждате резултати.вид ()анализираният обект ще изглежда така:

Алексей, 124

Маркус, 333

Наташа, 211

И ако размените елементите във всеки вложен масив, получавате:

124, Алексей

211, Наташа

333, Маркус

В този случай, за сравнение, всички елементи временно се преобразуват в низове.

Ако за решаване на конкретна задача се нуждаете от функция, която сортира елементите по нестандартен начин, тогава можете да я напишете сами и да я предадете като параметър на вид ()... Трябва да се има предвид, че персонализирана функция трябва да върне:

  • положително число (обикновено се избира 1), ако първият посочен елемент следва втория в сравнението;
  • отрицателно число (обикновено -1), ако вторият избран елемент трябва да следва първия;
  • нула, ако двете тествани стойности са равни.

Като пример, нека вземем първоначалния масив резултатисортиране по точки. Освен това резултатите ще бъдат сортирани от най -високите до най -ниските. Това може да стане по два начина.

В първата версия промених логиката на сортиране, т.е. в ситуация, в която е необходимо да се върне положително число, връщам отрицателно и обратно.

Записваща таблица:

Но във втория метод оставих логиката за сортиране непокътната, но допълнително използвах друг метод - обратен ()... Както подсказва името, обратното обръща реда на елементите.

Следователно функцията sort () ще изглежда така:

1 2 3 4 5 функция RecordSort (a, b) (ако (a> b) връща 1; иначе ако (a< b) return -1; else return 0; }

функция RecordSort (a, b) (ако (a> b) връща 1; иначе ако (a< b) return -1; else return 0; }

След това нека добавим горния метод.

Заключението се прави по подобен начин.

Искам да ви обърна внимание на един важен момент. Когато използвате тези функции, всички промени се появяват в масива, към който ги прилагате. По този начин, ако трябва да запазите първоначалната форма на данните, създайте копие и след това го редактирайте.

Е, затова говорих за многоизмерни масиви и тяхното сортиране. Ако статията ви е харесала, абонирайте се за блога и прочетете други също толкова интересни публикации. Ще съм благодарен за репоста. До следващия път!

Чао чао!

С уважение, Роман Чуешов