Zlepšení

Proč potřebujeme pole?

Tato funkce je dobře zavedená a funguje na mnoha zařízeních a verzích prohlížečů. Je k dispozici ve všech prohlížečích od července 2015.

Zařízení Řada , stejně jako pole v jiných programovacích jazycích, umožňuje uložit kolekci více prvků pod jedním názvem proměnné a má metody pro provádění běžných operací s poli.

popis

Pole jsou objekty podobné seznamům, jejichž prototypy obsahují metody pro procházení a úpravy pole. Velikost pole JavaScript ani jeho typy prvků nejsou pevně dané. Vzhledem k tomu, že velikost pole se může kdykoli zvětšit a zmenšit, nelze zaručit, že pole bude husté. To znamená, že při práci s polem může nastat situace, že prvek pole, ke kterému přistupujete, bude prázdný a vrátí se undefined . Celkově jde o užitečnou funkci; ale pokud tato funkce pole není ve vašem konkrétním případě žádoucí, můžete zvážit použití typovaných polí.

Někteří lidé se domnívají, že byste neměli používat pole jako asociativní pole. Každopádně místo nich můžete použít jednoduché předměty, i když mají svá úskalí. Viz příspěvek Lehké slovníky JavaScriptu s libovolnými klíči(angl.) jako příklad.

Přístup k prvkům pole

Pole v JavaScriptu mají nulový index: první prvek pole má index 0 a index posledního prvku se rovná hodnotě vlastnosti pole délka mínus 1.

const arr = ["первый элемент", "второй элемент", "последний элемент"]; console.log(arr[0]); // напечатает 'первый элемент' console.log(arr[1]); // напечатает 'второй элемент' console.log(arr[arr.length - 1]); // напечатает 'последний элемент' 

Prvky pole jsou vlastnosti, stejně jako například vlastnost toString, ale pokus získat prvek pole podle názvu vlastnosti bude mít za následek chybu syntaxe, protože název vlastnosti není platný název JavaScript:

console.log(arr.0); // синтаксическая ошибка 

Toto není vlastnost polí nebo jejich vlastností. V JavaScriptu nelze k vlastnostem, které začínají číslicí, přistupovat pomocí tečkové notace; lze k nim přistupovat pouze pomocí zápisu závorek. Pokud máte například objekt s vlastností pojmenovanou ‘3d’ , budete k němu mít přístup pouze pomocí zápisu závorek. Příklady:

const years = [1950, 1960, 1970, 1980, 1990, 2000, 2010]; console.log(years.0); // синтаксическая ошибка console.log(years[0]); // работает как положено 
renderer.3d.setTexture(model, 'character.png'); // синтаксическая ошибка renderer['3d'].setTexture(model, 'character.png'); // работает как положено 

Všimněte si, že ve druhém příkladu je 3d uzavřeno v uvozovkách: ‘3d’ . Indexy mohou být uzavřeny v uvozovkách (např. years[‘2’] místo years[2] ), ale není to nutné. Hodnota 2 ve výrazu years[2] bude implicitně přetypována na řetězec pomocí modulu JavaScriptu pomocí metody konverze toString. Z tohoto důvodu budou klíče ‘2’ a ’02’ odkazovat na dva různé prvky v objektu years a následující příklad bude mít výstup true :

console.log(years["2"] != years["02"]); 

Podobně k vlastnostem objektů, které jsou vyhrazenými slovy (!), lze přistupovat pouze pomocí zápisu závorek:

const promise = < var: "text", array: [1, 2, 3, 4], >; console.log(promise["array"]); 

Vztah mezi vlastností length a numerickými vlastnostmi

Vlastnost length polí je propojena s numerickými vlastnostmi. Některé vestavěné metody pole (jako join , slice , indexOf atd.) berou při svém volání v úvahu hodnotu vlastnosti length. Další metody (například push, splice atd.) také aktualizují vlastnost length pole jako výsledek své práce.

const fruits = []; fruits.push("банан", "яблоко", "персик"); console.log(fruits.length); // 3 

Pokud při nastavování vlastnosti na poli má vlastnost platný index a tento index přesahuje aktuální hranice pole, modul odpovídajícím způsobem aktualizuje vlastnost length:

fruits[5] = "манго"; console.log(fruits[5]); // 'манго' console.log(Object.keys(fruits)); // ['0', '1', '2', '5'] console.log(fruits.length); // 6 

Zvětšete vlastnost length

fruits.length = 10; console.log(Object.keys(fruits)); // ['0', '1', '2', '5'] console.log(fruits.length); // 10 

Snížením vlastnosti length však prvky odstraníte.

fruits.length = 2; console.log(Object.keys(fruits)); // ['0', '1'] console.log(fruits.length); // 2 

Toto téma je podrobněji popsáno na stránce věnované vlastnosti Array.length.

Vytvoření pole pomocí výsledku porovnání

Výsledkem shody regulárního výrazu s řetězcem je pole JavaScriptu. Toto pole má vlastnosti a prvky, které poskytují informace o mapování. Taková pole jsou vrácena metodami RegExp.exec, String.match a String.replace. Abyste snáze pochopili, odkud a jaké vlastnosti a prvky pocházejí, podívejte se na následující příklad a prohlédněte si níže uvedenou tabulku:

// Сопоставляется с одним символом d, за которым следует один // или более символов b, за которыми следует один символ d // Запоминаются сопоставившиеся символы b и следующий за ними символ d // Регистр игнорируется const myRe = /d(b+)(d)/i; const myArray = myRe.exec("cdbBdbsbz"); 

Vlastnosti a prvky vrácené z tohoto mapování jsou popsány níže:

Vlastnost/prvek popis příklad
vstup Vlastnost pouze pro čtení, která odráží původní řetězec, se kterým byl regulární výraz porovnán. cdbBdbsbz
index Vlastnost pouze pro čtení, která je indexem (založeným na nule) v řádku, kde shoda začala. 1
[0] Prvek pouze pro čtení, který identifikuje naposledy nalezené znaky. dbBd
[1], . [n] Prvky pouze pro čtení určující odpovídající podřetězce, pokud jsou součástí regulárního výrazu, jsou uzavřeny v závorkách. Počet možných podřetězců není omezen. [1]: bB [2]: d

Návrhář

Vytvoří nový objekt Array.

Statické vlastnosti

Vrátí konstruktor Array.

Statické metody

Vytvoří novou instanci Array z iterovatelného objektu nebo objektu podobného poli.

Vytvoří novou instanci Array z asynchronně iterovatelného, ​​iterovatelného objektu nebo objektu podobného poli.

Vrátí hodnotu true, pokud je argument pole, a v opačném případě vrací hodnotu false.

Vytvoří novou instanci Array s proměnným počtem argumentů bez ohledu na počet nebo typ argumentů.

Vlastnosti instance

Tyto vlastnosti jsou definovány v Array.prototype a jsou přítomny ve všech instancích Array.

Funkce konstruktoru, která vytváří instanci objektu. Pro instance Array je počáteční hodnotou konstruktor Array.

Obsahuje názvy vlastností, které nebyly zahrnuty ve standardu ECMAScript před ES2015 a které jsou ignorovány příkazem with.

Nativní vlastnosti každé instance pole:

Odráží počet prvků v poli.

Metody instance

Vrátí prvek pole na zadaném indexu. Přijímá záporné hodnoty, jejichž počítání začíná od konce pole.

Vrátí nové pole, které je sjednocením aktuálního pole s jinými poli nebo hodnotami.

Zkopíruje posloupnost prvků v poli.

Vrátí nový objekt iterátor pole, který obsahuje páry klíč/hodnota pro každý index v poli.

Vrátí hodnotu true, pokud funkce předaná jako argument vrátí hodnotu true pro každý prvek pole.

Vyplní všechny prvky pole od počátečního indexu po poslední zadanou hodnotou.

Vrátí nové pole obsahující všechny prvky původního pole, pro které předaná funkce vrátila hodnotu true .

Vrátí hodnotu prvního prvku pole, pro který funkce předaná jako argument vrátí hodnotu true , nebo undefined, pokud žádné takové prvky neexistují.

Vrátí index prvního prvku pole, pro který funkce předaná jako argument vrátí hodnotu true , nebo -1, pokud žádné takové prvky neexistují.

Vrátí hodnotu posledního prvku pole, pro který funkce předaná jako argument vrátí hodnotu true , nebo undefined, pokud žádné takové prvky neexistují.

Vrátí index posledního prvku pole, pro který funkce předaná jako argument vrátí hodnotu true , nebo -1, pokud žádné takové prvky neexistují.

Vrátí nové pole obsahující prvky všech vnořených polí až do zadané hloubky.

Vrátí nové pole vytvořené voláním předané funkce s každým prvkem a poté „sloučeno“ o jednu úroveň.

Volá funkci na každém prvku pole.

Vrátí hodnotu true, pokud pole obsahuje předanou hodnotu, a v opačném případě vrací hodnotu false.

Vrátí první (nejnižší) index, na kterém lze nalézt předaný prvek.

Zřetězí všechny prvky pole do řetězce.

Vrátí nový objekt iterátor pole, který obsahuje klíče každého indexu pole.

Vrátí poslední (nejvyšší) index, na kterém lze nalézt předaný prvek, nebo -1, pokud žádné takové prvky neexistují.

Vrátí nové pole obsahující výsledek aplikace předané funkce na každý prvek původního pole.

Odebere poslední prvek pole a vrátí jeho hodnotu.

Přidá jeden nebo více prvků na konec pole a vrátí novou délku pole.

Volá zadanou funkci redukce na každém prvku pole (zleva doprava), aby získala jedinou hodnotu.

Volá zadanou funkci redukce na každém prvku pole (zprava doleva), aby získala jedinou hodnotu.

Změní pořadí prvků pole na místě (tj. změna původního pole) na opačný (první se stane posledním, poslední se stane prvním).

Odebere první prvek pole a vrátí jeho hodnotu.

Načte část pole a vrátí ji jako nové pole.

Vrátí hodnotu true, pokud funkce předaná jako argument vrátí hodnotu true pro alespoň jeden prvek pole.

Seřadí prvky pole na místě (tj. úpravou původního pole) a vrátí pole.

Přidá a/nebo odebere prvky pole.

Vrátí lokalizovaný řetězec představující původní pole a jeho prvky. Přepíše metodu Object.prototype.toLocaleString().

Vrátí nové pole s prvky v opačném pořadí, aniž by se změnilo původní pole.

Vrátí nové pole s prvky seřazenými vzestupně beze změny původního pole.

Vrátí nové pole s odstraněnými a/nebo nahrazenými prvky beze změny původního pole.

Vrátí řetězec představující původní pole a jeho prvky. Přepíše metodu Object.prototype.toString().

Přidá jeden nebo více prvků na začátek pole a vrátí novou délku pole.

Vrátí nový objekt iterátor pole, který obsahuje hodnoty každého indexu pole.

Vrátí nové pole s nahrazenou hodnotou prvku na zadaném indexu, aniž by se změnilo původní pole.

Příklady

Příklad: vytvoření pole

Následující příklad vytvoří pole msgArray s délkou 0, přiřadí hodnoty msgArray[0] a msgArray[99], což změní délku pole na 100.

const msgArray = []; msgArray[0] = "Dobrý den"; msgArray[99] = "svět"; if (msgArray.length === 100)

Vytvoření pole

const fruits = ["Яблоко", "Банан"]; console.log(fruits.length); // 2 

Přístup k prvku pole indexem

const first = fruits[0]; // Яблоко const last = fruits[fruits.length - 1]; // Банан 

Iterace přes pole

fruits.forEach(function (item, index, array) < console.log(item, index); >); // Яблоко 0 // Банан 1 

Přidání prvku na konec pole

const newLength = fruits.push("Апельсин"); // ["Яблоко", "Банан", "Апельсин"] 

Odstranění posledního prvku pole

const last = fruits.pop(); // удалим Апельсин (из конца) // ["Яблоко", "Банан"]; 

Odstranění prvního prvku pole

const first = fruits.shift(); // удалим Яблоко (из начала) // ["Банан"]; 

Přidání prvku na začátek pole

const newLength = fruits.unshift("Клубника"); // добавляет в начало // ["Клубника", "Банан"]; 

Hledání čísla prvku v poli

fruits.push("Манго"); // ["Клубника", "Банан", "Манго"] const pos = fruits.indexOf("Банан"); // 1 

Odebrání prvku na konkrétním indexu

const removedItem = fruits.splice(pos, 1); // так можно удалить элемент // ["Клубника", "Манго"] 

Odstranění více prvků počínaje určitým indexem

Tento příklad používá metodu splice() k odstranění řetězců „Banana“ a „Strawberry“ z pole ovoce, přičemž uvádí index řetězce „Banana“ a počet prvků, které mají být odstraněny.

const fruits = ["Яблоко", "Банан", "Клубника", "Манго"]; const start = 1; const deleteCount = 2; const removedItems = fruits.splice(start, deleteCount); console.log(fruits); // ["Яблоко", "Манго"] console.log(removedItems); // ["Банан", "Клубника"] 

Vytvoření kopie pole

const shallowCopy = fruits.slice(); // так можно создать копию массива // ["Клубника", "Манго"] 

Příklad: Vytvoření 2D pole

Následující kód vytvoří šachovnici jako dvourozměrné pole řetězců. Poté přesune pěšce zkopírováním symbolu „p“ na pozici (6,4) na pozici (4,4). Stará pozice (6,4) je přepsána prázdným místem.

const board = [ ["R", "N", "B", "Q", "K", "B", "N", "R"], ["P", "P", "P", "P", "P", "P", "P", "P"], [" ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " "], ["p", "p", "p", "p", "p", "p", "p", "p"], ["r", "n", "b", "q", "k", "b", "n", "r"], ]; console.log(board.join("n") + "nn"); // Двигаем королевскую пешку вперёд на две клетки board[4][4] = board[6][4]; board[6][4] = " "; console.log(board.join("n")); 
R,N,B,Q,K,B,N,RP,P,P,P,P,P,P,P , , , , , , , , , , , , , , , , , , , , , , , , , p,p,p,p,p,p,p,pr,n,b,q,k,b,n,r R,N,B,Q,K,B,N, RP,P,P,P,P,P,P,P, , , , , , , , , , , , , , , , , , , , , , , , , p, p, p, p , ,p,p,pr,n,b,q,k,b,n,r

Specifikace

Specifikace
Specifikace jazyka ECMAScript
# sec-array-objects

Kompatibilita prohlížeče

BCD tabulky se načítají pouze v prohlížeči

viz též

  • Objednané datové sady
  • TypedArray
  • ArrayBuffer

Pole v informatice je datový typ, který ukládá uspořádanou sadu prvků stejného typu. Pole se nacházejí ve většině programovacích jazyků a jsou potřeba pro pohodlné ukládání více hodnot a rychlou práci s nimi.

Osvojte si profesi „datového vědce“

Strukturu dat lze přirovnat k sadě číslovaných polí, z nichž každé obsahuje položku. Tato položka je prvkem pole a číslo na krabici je index prvku, pořadové číslo, podle kterého jej lze nalézt.

V některých programovacích jazycích mají pole alternativní názvy, například řádek, matice nebo vektor. Struktura dat je skutečně podobná těmto matematickým konceptům: také představují souvislou sadu prvků s jasně pevnou pozicí.

Bezplatný projekt kariérového poradenství

Udělejte si test a určete svůj směr v IT. Vyhrajte ceny, získejte dárky a plán osobního rozvoje prostřednictvím bezplatných průvodců a kariérních konzultací

Zúčastněte se zdarma

Kdo potřebuje pole a proč?

Téměř všichni programátoři používají pole. Jsou potřebné v situacích, kdy je nutné pracovat se stejným typem dat, například s posloupností čísel, objektů nebo řetězců.

  • uložit několik hodnot stejného typu do jedné proměnné;
  • strukturovat a organizovat informace;
  • Snadný přístup ke každému prvku;
  • rychle aplikovat stejné akce na všechny prvky pole;
  • šetřit paměť a udržovat vysokou rychlost akcí.

Navíc je to jednoduše pohodlnější než „vkládat“ několik podobných prvků do různých proměnných. Pole jsou jednou ze základních struktur v programování a bez nich by bylo psaní kódu mnohem obtížnější.

Jak je pole strukturováno

Technicky je pole proměnná, která obsahuje několik hodnot, druh kontejneru. Prvky pole mají obvykle stejný typ, například jsou to všechna čísla nebo řetězce. Prvky jsou umístěny v sousedních paměťových buňkách, takže vyjmenování prvků nebo jiné akce s nimi probíhají celkem rychle. Přístupová doba ke každému prvku je pevná a získat odkaz na kterýkoli z nich je díky indexům snadné.

Klasické statické pole má pevnou délku, tedy počet prvků. Nastavuje se při vytváření proměnné: vývojář hned zapíše do popisu pole, kolik prvků bude ukládat. Pokud překročíte tento rozsah a pokusíte se například přiřadit hodnotu šestému prvku pětiprvkového pole, dojde k chybě.

Indexy ve standardním poli mohou být pouze celá čísla, která jdou v pořadí: 0, 1, 2 atd. Ve většině programovacích jazyků začíná indexování od nuly.

Co můžete dělat s prvky pole?

Jednou z výhod použití pole je flexibilita a snadná práce s daty. Prvky mohou mít různé hodnoty a poté je změnit nebo resetovat. K prvkům můžete přistupovat pomocí indexu. Například pole[5] odkazuje na pátý prvek pole s názvem pole.

S prvky jednotlivě můžete dělat totéž, co s běžnými proměnnými: provádět různé operace, zobrazovat je na obrazovce nebo v souboru, používat je ve vzorcích a podobně. Většina jazyků má také operace a metody, které se vztahují na všechny prvky pole, takže můžete napsat jeden řádek a upravit celé pole.

Kurz pro začátečníky „IT specialista“
od nuly“ – zjistíme, která profese je pro vás ta pravá, a pomůžeme vám ji zvládnout

Existují i ​​další speciální funkce. Například v některých jazycích můžete převést řetězec nebo jiný typ proměnné na pole. Existují samostatné příkazy pro přístup k prvnímu a poslednímu prvku pole, pro jejich odstranění nebo úpravu, pro získání délky pole a tak dále.

Konkrétní implementace a sada funkcí závisí na programovacím jazyku. Práce s poli se může v různých jazycích lišit, ale podstata datové struktury zůstává stejná.

Co jsou pole?

Jednorozměrné a vícerozměrné. Klasické pole je jednorozměrné, to znamená, že vypadá jako řada prvků. Pole ale může být i vícerozměrné, nejčastěji dvourozměrné: pak se skládá z několika řádků umístěných pod sebou. Dvourozměrné pole má dva indexy: jeden definuje řádek, druhý definuje pozici prvku v tomto řádku. Je podobný matematické matici nebo dvourozměrnému souřadnicovému systému.

Někdy jsou dvourozměrná pole implementována jako „pole v poli“, v jiných případech existuje samostatný způsob jejich popisu – vše závisí na jazyku, frameworku a dalších použitých technologiích.

Trojrozměrná pole a struktury s vyššími rozměry se používají extrémně zřídka.

Statické a dynamické. Statické pole je klasickou implementací této datové struktury. Má pevně stanovený počet prvků, který je specifikován při tvorbě a zůstává po celou dobu své existence nezměněn. To ale není vždy výhodné, a proto existují i ​​dynamická pole.

Dynamická pole mají „flexibilní“ délku, která se automaticky zvětšuje nebo zmenšuje, když je prvek přidán nebo odebrán z datové struktury. To je pro vývojáře pohodlnější a šetří to paměť: není třeba ukládat mnoho „prázdných“ prvků, jako ve statickém poli, které nemá celou délku.

Interně jsou dynamická pole nejčastěji strukturována jako statická, která se při změně délky znovu vytvoří. V tomto případě není „krokem“ znovuvytvoření jeden prvek, ale více, to znamená, že délka se okamžitě zvětší, řekněme, o pět prvků, a ne o jeden. To je nutné, aby nedošlo k přetížení programu neustálým znovuvytvářením pole.

Homogenní a heterogenní. Klasické pole je opět homogenní, to znamená, že obsahuje prvky pouze jednoho typu. Některé jazyky však podporují heterogenní pole, kde mohou být uloženy prvky různých typů: například číslo, pak řetězec a pak objekt.

Tato funkce může být pohodlná, ale je třeba s ní být opatrní, protože teoreticky zvyšuje riziko chyby na straně programátora. Například se pokusí přidat prvky jako čísla a jedním z nich bude řetězec. Dojde k chybě nebo se program začne chovat nepředvídatelně.

Asociativní. Asociativní pole jsou speciálním podtypem datové struktury, ve které indexy nemusí být nutně uspořádaná celá čísla. Jedná se o sadu dat ve formátu „klíč-hodnota“, kde klíč je analogem indexu a hodnota je analogem prvku.

Asociativní pole lze nazývat mnoha různými jmény: například v Pythonu se nazývá slovník. Struktura dat je opravdu jako slovník, kde klíčem je slovo a hodnotou jeho popis. Druhým jasným příkladem je telefonní seznam, kde jsou informace uváděny ve formátu „celé jméno – telefonní číslo“.

Asociativní pole jsou často heterogenní a dynamická, ale to opět závisí na programovacím jazyce.

Datové struktury podobné poli

Pole není jedinou datovou strukturou, která ukládá více prvků. Existují také tzv. haldy a množiny, kde se informace nečíslují, zásobníky, kde je možný přístup pouze k prvnímu prvku, a fronty, kde lze přistupovat pouze k poslednímu prvku. Existují také propojené seznamy, grafy a stromy – v těchto datových strukturách jsou prvky propojeny zvláštním způsobem pomocí odkazů.

Jakou strukturu zvolit pro uložení konkrétní sady hodnot, závisí na úkolu. Důležitá je rychlost přístupu, snadnost použití a další kritéria.

Více o ukládání dat se můžete dozvědět v kurzech programování – získejte novou profesi a staňte se vyhledávaným IT specialistou.

Seznamte se s pěti oblastmi IT: vývoj, analýza dat, testování, white hat hacking, Data Science. Živě si vyberte profesi pro pohodlný přechod k IT a vybudujte si osobní vzdělávací dráhu. Jedno vysílání = 50+ hodin hledání informací na internetu.

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button