КампутарыПраграмаванне

JavaScript-масіў і яго стварэнне. Усё пра масівах JavaScript

У гэтым артыкуле мы разгледзім JavaScript-масіў, яго складнікі. JavaScript з'яўляецца ідэальна-арыентаваным сцэнарных мовай, створаным для праграмавання. Фактычна ён рэалізуе мова ECMAScript (эталон ECMA-262).

Дзе выкарыстоўваецца JavaScript? Яго ўжываюць у якасці ўбудаванай мовы для таго, каб вызначыць праграмны шлях да прадмета прыкладання. Яго можна знайсці ў браўзэрах: ён выкарыстоўваецца там як сцэнарны мова, які надае вэб-старонкам інтэрактыўнасць.

Найважнейшымі архітэктурнымі рысамі гэтага прадукта з'яўляюцца дынамічная і слабая тыпізацыя, автоуправление памяццю, ідэальнае праграмаванне, функцыі, якія з'яўляюцца аб'ектамі першага разраду.

Наогул, на JavaScript паўплывалі розныя прычыны, бо пры распрацоўцы хацелі стварыць мова, падобны на Java, але лёгкі для выкарыстання праграмістамі. Дарэчы, мовай JavaScript не валодае якое-небудзь прадпрыемства або арганізацыя, што робіць яго непадобным на шэраг праграмных стыляў, якія ўжываюцца вэб-распрацоўшчыкамі.

Неабходна адзначыць, што JavaScript - зарэгістраваны таварны знак канцэрна Oracle Corporation.

Што такое масіў?

Масівам называюць тып дадзеных, які захоўвае пронумерованные значэння. Кожнае такое значэнне называецца кампанентам масіва, а лічбу, з якой звязваецца кампанент, называюць індэксам. JavaScript-масіў нетипизирован. Гэта азначае, што дэталі масіва могуць мець які заўгодна тып, прычым розныя дэталі, якія належаць аднаму масіву, маюць зусім розныя тыпы.

Акрамя гэтага, JavaScript-масіў з'яўляецца дынамічным, а гэта сведчыць аб тым, што фіксаваны памер няма неабходнасці аб'яўляць. Бо дадаваць новыя дэталі можна ў любы момант.

вытворчасць масіва

Выкарыстоўваючы мову JavaScript, стварыць масіў зусім не цяжка. Маецца для гэтага два метаду. Першы прадугледжвае выраб масіва з дапамогай литерала - квадратных дужак, усярэдзіне якіх размешчаны спіс дэталяў, падзеленых коскамі.

  • var empty = []; // пусты масіў;
  • var numers = [4, 1, 2, 5]; // масіў з пяццю лічбавымі кампанентамі;
  • var diff = [1.5, false, «тэкст»]; // масіў з трыма элементамі рознага выгляду.

Як правіла, тут не патрабуецца, каб значэння былі простымі (радкі і колькасці). Гэта таксама могуць быць і любыя іншыя выразы, да прыкладу, прадметныя литералы, іншыя функцыі і масівы.

Другім спосабам стварэння масіва з'яўляецца выклік праекціроўшчыка Array (). Запрасіць яго можна трыма метадамі:

  • Выклік праекціроўшчыка без довадаў: var b - new Array (). Тут прадугледжана стварэнне пустога масіва, эквівалентнага пустому литералу [].
  • Канструктар відавочна мае ўказанні значэння n кампанентаў масіва: var b = new Array (1, 3, 5, 8, «радок», true). У дадзеным выпадку праектоўніку падаецца спіс аргументаў, якія ператвараюцца ў кампаненты новага масіва. Аргументы пішуцца ў масіў у тым размяшчэнні, у якім пазначаны.
  • Вызначэнне вобласці для наступнага прыпісвання значэнняў. Гэта робіцца з дапамогай ўказанні пры выяўленні масіва аднаго ліку, зняволенага ў круглыя дужкі: var b = new Array (5). Дадзены спосаб выяўлення мяркуе вылучэнне масіву неабходнай колькасці кампанентаў (кожны з якіх значыцца як undefined) з магчымасцю наступнага прыпісвання значэнняў у працэсе выкладання. Такую форму звычайна выкарыстоўваюць, каб папярэдне размясціць той Javascript-масіў, у якога даўжыня вядомая загадзя.

Запіс, чытанне і даданне дэталяў масіва

Дабрацца да кампанентаў масіва можна з дапамогай аператара []. Дарэчы, усе кампаненты ў JavaScript, пачынаючы з нуля, нумаруюцца. Для атрымання неабходнага элемента, яго нумар паказваюць у квадратных дужках. Як правіла, дэталі можна змяняць. А каб JavaScript дадаць у масіў, досыць новае значэнне прысвоіць.

Неабходна адзначыць, што ў масівах JavaScript можна захоўваць якое заўгодна колькасць элементаў любога выгляду.

даўжыня масіва

Такім чынам, мы ведаем, што такое JavaScript. Даўжыня масіва наогул з'яўляецца цікавым з'явай. Разгледзім яго падрабязней. Усе масівы, як сканструяваныя з дапамогай праекціроўшчыка Array (), так і выяўленыя дзякуючы литералу масіва, маюць спецыфічнае ўласцівасць length, якое адклікае агульная колькасць зьберагаецца элементаў. Бо ў масіве могуць знаходзіцца неазначальныя дэталі (абазначаюцца undefined), больш дакладнае выраз гучыць такім чынам: якасць length заўсёды больш на адзінку, чым самы вялікі нумар (індэкс) кампанента масіва. Якасць length карэктуецца аўтаматычна, застаючыся дакладным пры з'яўленні ў масіве новых дэталяў.

Каб з'явіўся завяршальны кампанент масіва, можна выкарыстоўваць ўласцівасць length.

Апошняя дэталь мае індэкс на адзінку менш чым, памер масіва. Бо адлік пачынаюць заўсёды з нуля. Ох ужо гэты JavaScript! Даўжыня масіва яго залежыць ад дакладнай колькасці элементаў. Таму калі вы не ведаеце, колькі іх павінна быць, але вам трэба звярнуцца да завяршальнага элементу масіва, трэба ўжыць запіс: v.length - 1.

Перабор дэталяў масіва

Вельмі часта ўласцівасць length выкарыстоўваюць для перабору дэталяў масіва ў цыкле:

  • var fruits = [ «клубніцы», «персік», «яблык», «банан»];
  • for (var I = 0; i
  • document.write (fruits [i] + «...»).

У гэтым прыкладзе уяўляецца, што кампаненты размешчаны бесперапынна і пачынаюцца з першай дэталі, якая валодае нулявым індэксам. Калі гэта не так, перад выклікам кожнага элемента масіва неабходна правяраць, вызначаны Ці ён.

Цыкл таксама часам выкарыстоўваюць для ініцыялізацыі кампанентаў.

Павелічэнне і ўсячэнне масіва

Цікава, як выкарыстоўваючы мову JavaScript радок у масіў дадаць? У працэсе працы з масівамі, даўжыня якасці length аўтаматычна паляпшаецца, вось чаму нам даводзіцца пра гэта клапаціцца самастойна. Неабходна ўспомніць пра адну дэталі - ўласцівасць length не толькі для чытання даступна, але і для запісу. Калі якасці length прыпісаць значэнне, якое саступае па памеры бягучаму, то масіў памяншаецца да зададзенай велічыні. Любыя кампаненты, якія не ўваходзяць у новы дыяпазон індэксаў, адкідваюцца, і іх значэння губляюцца, нават калі пазней вярнуць length назад - значэння не адрэстаўруюць.

Вельмі проста ачысціць масіў так: foo.length = 0.

Калі якасць length выканаць вялікім, чым яго цяперашняе значэнне, у канцы масіва з'явяцца новыя неўпаўнаважаныя дэталі, якія павялічаць яго да патрэбнага памеру.

Выдаленне дэталяў масіва

Аператар delete паказвае ў кампаненце масіва значэнне undefined, а ён пры гэтым працягвае існаванне. Калі неабходна выдаліць элемент масіва JavaScript так, каб тыя, што засталіся дэталі зрушыліся на якое вызвалілася месца, трэба выкарыстоўваць адзін з прадугадала спосабаў масіва. Спосаб Array.shift () ліквідуе першы кампанент, pop () - завяршальны кампанент, а спосаб splice () - адзін альбо дыяпазон кампанентаў у любым месцы масіва.

масівы шматмерныя

Здаецца, мы крыху разабраліся, што такое JavaScript. Двухмерныя масівы - вось што неабходна разгледзець далей. Вы памятаеце, што масівы JavaScript могуць у якасці кампанентаў ўтрымліваць іншыя элементы? Гэтую асаблівасць выкарыстоўваюць для вытворчасці шматмерных масіваў. Для наведвання кампанентаў у масіве масіваў дастаткова ўжыць квадратныя дужкі двойчы.

асацыятыўныя масівы

А цяпер вывучым, як таварны знак JavaScript асацыятыўныя масівы выкарыстоўвае. Для гэтага нам трэба зазірнуць у тэорыю: масівы асацыятыўныя часам называюць хэш-табліцамі. Дзякуючы ім замест індэксаў прымяняюцца радка. Выкарыстанне такіх канструкцый нагадвае прымяненне імя ўласцівасці простага аб'екта, але ў дадзеным варыянце пры выкананні работ у фармаце масіва. Так як у JavaScript адсутнічаюць спосабы апэраваньня масівамі асацыятыўнымі, яны выкарыстоўваюцца значна радзей, чым звычайныя. Неабходна адзначыць, што яны ўсё ж могуць быць карысныя для захоўвання дадзеных і спрашчаюць запамінанне дэталяў, да якіх неабходна атрымаць доступ.

выснову масіва

А што зараз мы вывучым ў сістэме JavaScript? Выснову масіва ў дыялогавае акно (на экран манітора), а таксама вывад значэнняў кампанентаў масіва.

Калі ў праграме трэба вывесці значэння ўсіх кампанентаў, то для гэтага зручна ўжыць інструкцыю for. Цікава, што зменная-лічыльнік правілаў for выкарыстоўваецца пры гэтым як індэкс кампанента масіва.

ачыстка

Для таго каб адфільтраваць масіў JavaScript, трэба абнуліць яго даўжыню:

  • var myArray = [1, 2, 5, 23];
  • myArray.length = 0.

Далей паказана рэалізацыя прызначэння clear () у вядомым JavaScript-фреймворке Prototype:

  • clear: function () {;
  • this.length = 0;
  • return this;
  • }.

Даданне і выдаленне кампанентаў

Ну што ж, працягваем далей вывучаць гэты цікавы мова JavaScript. Элемент масіва можна і выдаляць, і дадаваць гэтак жа, як і звычайныя ўласцівасці іншых аб'ектаў. Але тут маюцца некаторыя адрозненні: пры даданні лікавых уласцівасцяў можа змяняцца якасць length, а пры мадыфікацыі ўласцівасці length могуць ліквідавацца лікавыя якасці. У прынцыпе, алгарытм ўстаноўкі якасцяў у масіваў з'яўляецца такім:

  • Пры даданні невядомага лічбавага ўласцівасці i, калі length роўны альбо менш i, length вызначаецца роўным i + 1.
  • Пры змене якасці length здзяйсняюцца наступныя дзеянні: калі прысвоенае значэнне менш за нуль, то кідаецца RangeError. Ліквідуюцца ўсе лікавыя якасці і індэксы, якія роўныя новаму length і якіх больш.

Наогул выдаліць элемент масіва JavaScript нескладана. Бо, нават усталёўваючы length, трэба з яго выдаліць «лішнія» кампаненты. Адсюль вынікае варыянт ачысткі масіва. Калі прысваенне пераменная пустога новага масіва па нейкай прычыне не задаволіла, а неабходна абнуліць менавіта цяперашні, дастаткова яго якасці length прысвоіць значэнне нуль.

Метады unshift, shift, pop і push

Нягледзячы на тое што кампаненты масіва змяняюцца ўручную, многія рэкамендуюць для гэтага ўжываць убудаваныя метады. Менавіта гэты нюанс гарантуе карэктнае значэнне якасці length і адсутнасць у масіве пропускаў. Дарэчы, карэктнае якасць length будзе адпавядаць колькасць кампанентаў.

Спосаб push пераносіць у канец масіва перададзеныя дэталі. Спосаб pop аддае назад завяршальны кампанент і выдаляе яго.

Наогул у Internet Explorer малодшай восьмай версіі unshift можа вярнуць undefined, у іншых браўзэрах - новае значэнне length. Так што на якое вяртаецца ад unshift значэнне лепш не спадзявацца.

Даданне і ліквідацыя дэталяў у сярэдзіне масіва

Калі неабходна выдаліць масіў JavaScript, што трэба зрабіць? Вядома, што спосаб splice мае сігнатуру Array.prototype.splice.

Ён з масіва адбірае deleteCount кампанентаў, пачынаючы з паказчыка start. Калі перададзена больш за два аргументаў, то ўсе наступныя аргументы ў масіве размяшчаюцца замест ліквідаваных. Калі start мінусовы, то індэкс, з якога адновіцца канфіскацыя, будзе роўны length + start. Зварот у масіў адбываецца з аддаленых элементаў.

Фактычна, выкарыстоўваючы метад splice, можна выдаляць кампаненты з сярэдзіны масіва альбо дадаваць якое заўгодна колькасць у любое месца масіва.

У найпростым варыянце, калі можна было б выдаліць кампанент з індэксам i, трэба ў масіва запытаць метад splice з параметрамі i і 1.

У прынцыпе, другі параметр у спосабу splice не з'яўляецца абавязковым, але паводзіны функцыі з адным аргументам на кожным браўзэры рознае.

Да прыкладу, у Firefox, у апошніх варыяцыях Opera, у Safari і ў Chrome будуць канфіскаваныя ўсе дэталі да канца масіва.

У IE не будзе ліквідаваны ні адзін кампанент. У першых варыяцыях Opera паводзіны прадказаць немагчыма - будзе канфіскавана адна дэталь з індэксам start - 1. Таму заўсёды трэба ў дадзены метад перадаваць як мінімум два кампаненты.

ключы

Вядома ж, вывучаючы JavaScript, асацыятыўныя масівы, як згадвалася раней, неабходна таксама не выпускаць з-пад увагі. Гэта абстрактны выгляд інфармацыі (інтэрфейс да сховішча дадзеных), які дазваляе зберагаць пары выгляду «(ключ, велічыня)» і падтрымліваць аперацыі дадання пары, а таксама выдалення і пошуку пары па ключы:

- FIND (ключ).

- INSERT (значэнне, ключ).

- REMOVE (ключ).

Мяркуюць, што ў асацыятыўным масіве не могуць зьберагаецца дзве пары з падобнымі ключамі. У пары k + vv называецца велічынёй, асацыяванай з ключом k. Семантыка і назвы вышэйзгаданых аперацый у розных рэалізацыях такіх масіваў могуць быць рознымі.

Так, дзеянне FIND (ключ) вяртае велічыню, асацыяваную з зададзеным ключом, або нейкі спецыфічны аб'ект UNDEF, які азначае, што велічыня, асацыяваная з зададзеным ключом, адсутнічае. Два іншых дзеянні нічога не вяртаюць (за выключэннем дадзеных аб тым, паспяхова Ці была праведзена гэтая аперацыя).

Наогул, з пункту гледжання інтэрфейсу, асацыятыўны масіў зручна разглядаць як просты масіў, у якім у выглядзе індэксаў можна ўжываць не толькі цэлыя лікі, але і значэння іншых тыпаў - да прыкладу, радкі.

Дарэчы, падтрымка такіх масіваў маецца ў многіх трактаванай праграмных мовах высокага ўзроўню, такіх як PHP, Perl, Ruby, Python, Tcl, JavaScript і іншыя. Для моў, у якіх адсутнічаюць убудаваныя сродкі працы з асацыятыўнымі масівамі, створана каласальнае лік рэалізацый ў выглядзе бібліятэк.

Прыкладам асацыятыўнага масіва можа служыць тэлефонны даведнік. У дадзеным варыянце значэннем з'яўляецца комплекс «Ф. І. О. + адрас », а ключом - нумар тэлефона. Адзін тэлефонны нумар мае аднаго гаспадара, але адзін чалавек можа валодаць некалькімі нумарамі.

асацыятыўныя пашырэння

Неабходна адзначыць, што самыя вядомыя пашырэння ўключаюць наступныя дзеянні:

  • EACH - «прайсціся» па ўсіх зьберагаецца парах.
  • CLEAR - выключыць усе запісы.
  • MIN - знайсці пару з найменшай ключавым значэннем.
  • MAX - знайсці пару з найбольшым ключавым значэннем.

У апошніх двух варыянтах трэба, каб на ключах было паказана дзеянне параўнання.

Рэалізацыі асацыятыўных масіваў

Існуе мноства розных рэалізацый масіва асацыятыўнага. Самая звычайная рэалізацыя можа быць заснавана на простым масіве, кампанентамі якога з'яўляюцца пары (значэнне, ключ). Для паскарэння пошукавых дзеянняў можна спарадкаваць кампаненты дадзенага масіва па ключы і ажыццявіць знаходжанне з дапамогай бінарнага пошуку. Але гэта павялічыць прамежак часу, патрэбны для дадання новай пары, бо трэба будзе «рассоўваць» кампаненты масіва, каб у якая з'явілася пустое вочка спакаваць свежую запіс.

Найбольш вядомыя рэалізацыі, якія базуюцца на розных дрэвах пошуку. Да прыкладу, у тыпавой чытальні STL мовы C ++ кантэйнер map рэалізаваны на базе чорна-чырвонага дрэва. У стылях Ruby, Tcl, Python ўжываецца адзін з відаў хэш-табліцы. Існуюць і іншыя рэалізацыі.

Увогуле ў кожнай рэалізацыі маюцца свае недахопы і вартасці. Важна, каб усе тры дзеянні споўніліся як у сярэднім, так і ў горшым нюансе за перыяд Аб (log n), дзе n - бягучы лік зьберагаецца пар. Для ўзгодненых дрэў пошуку (у тым ліку для чорна-чырвоных дрэў) гэта ўмова выканана.

Вядома, што ў рэалізацыях, якія базуюцца на хэш-табліцах, сярэдні час вызначаецца як Аб (1), што лепш, чым у дзеяннях, якія базуюцца на дрэвах пошуку. Вядома, пры гэтым не гарантуецца высакахуткаснае выкананне асобных аперацый: час дзеяння INSERT ў горшым выпадку пазначаецца як Аб (n). Працэс INSERT выконваецца працяглы час, калі каэфіцыент запаўнення дасягае найвышэйшай кропкі і з'яўляецца неабходнасць рэканструкцыі індэкса хэш-табліцы.

Дарэчы, гэтыя хэш-ведамасці дрэнныя тым, што на іх базе нельга выконваць хуткія яшчэ два крокі MAX, MIN і алгарытм абыходу ўсіх зьберагаецца пар у парадку змяншэння альбо ўзрастання ключоў.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 be.atomiyme.com. Theme powered by WordPress.