HTML, Excel, Word, SEOÎñíîâû JavaScript ⇒ Ìàññèâû

ÎÑÍÎÂÛ JavaScript

Ó÷åáíèê JavaScript
·Çíàêîìñòâî ñ JS. Ïåðåìåííûå, îïåðàòîðû, îïåðàöèè
·Ôóíêöèè
·Ìîäåëü HTML äîêóìåíòà
·Èåðàðõèÿ äîêóìåíòîâ â áðàçóåðå
·Ôîðìû
·Îêíà è ôðåéìû
·Ññûëêè, çàãîëîâîê, ñòàòóñ
·Ñîáûòèÿ
·Ñîáûòèÿ êëàâèàòóðû è ìûøè
·Ñîáûòèÿ. Òàéìåð
·Ñòèëè. Óïðàâëåíèå ñòèëÿìè
·Ñëîè è áëîêè. Óïðàâëåíèå âèäèìîñòüþ
·Îáúåêòû JS
·Âíåøíèå îáúåêòû
·Âíóòðåííèå îáúåêòû
·Ìàññèâû
·Ðåãóëÿðíûå âûðàæåíèÿ
·Ìàòåìàòèêà â JS
·Ïðèìåð ïðîñòîãî êàëüêóëÿòîðà
·Äàòà è âðåìÿ
·Cookies è õðàíåíèå ñîñòîÿíèÿ
·Íåìíîãî îá AJAX
·Ðàáîòà ñ WebMoney



Ìàññèâû


Àâòîð: Àðòåìüåâ Ñåðãåé Èãîðåâè÷ ICQ: 438856621 email: _spin_@bk.ru

Êàê è áîëüøèíñòâî ÿçûêîâ ïðîãðàììèðîâàíèÿ, JavaScript ïðåäîñòàâëÿåò ñðåäñòâî äëÿ ðàáîòû ñ ôîðìàëèçîâàííûìè äàííûìè áîëüøîãî îáúåìà - ìàññèâû. Ìàññèâ - ýòî ñïèñîê ïåðåìåííûõ, ê êàæäîé èç êîòîðûõ ìîæíî ïîëó÷èòü äîñòóï ïî å¸ íîìåðó. Ìàññèâ ñîçäà¸òñÿ ñëåäóþùèì îáðàçîì:

// ñîçäàíèå ïóñòîãî ìàññèâà

// çàäàíèå çíà÷åíèé ïåðâûõ äâóõ ýëåìåíòîâ
var myArray = new Array()
myArray[0] = 'Ìîñêâà'
myArray[1] = 'Õàáàðîâñê'


// ñîçäàíèå íîâîãî ìàññèâà
// è ðåçåðâèðîâàíèå ìåñòà äëÿ 
// 100 ïåðåìåííûõ

var myArray = new Array(100)


// ñîçäàíèå íîâîãî ìàññèâà
// è ÿâíàÿ èíèöèàëèçàöèÿ ïåðâîãî ýëåìåíòà
var myArray = new Array('Ýëåìåíò');


// êîñâåííîå ñîçäàíèå ìàññèâà 
// èç äâóõ ýëìåíåòîâ

var myArray = ['ïåðâûé ýëåìåíò', 'âòîðîé ýëåìåíò']

Âñå ìàññèâû, íåçàâèñèìî îò ñïîñîáà ñîçäàíèÿ, ïðåäñòàâëÿþò ñîáîé ýêçåìïëÿðû êëàññà (îáúåêòà) Array. Äîáàâëåíèå ýëåìåíòîâ ïðîèçâîäèòñÿ ïðîñòîé èíèöèàëèçàöèåé ñîîòâåòñòâóþùåãî ýëåìåíòà.

var myArray = new Array()

myArray[0] = 'Ïèòåð'

Ìàññèâû â JavaScript íå îáÿçàòåëüíî äîëæíû áûòü "ñïëîøíûìè", ò.å. ñîäåðæàòü âñå ýëåìåíòû. Ïðè íåîáõîäèìîñòè ìîæíî ñîçäàâàòü òàê íàçûâàåìûå "ðàçðåæåííûå" ìàññèâû:

var myArray = new Array();
myArray[0] = 'Ïèòåð'
// ïðîïóñòèì myArray[1]
myArray[2] = 'Ãîìåëü'
// ïðîïóñòèì myArray[3]
myArray[4] = 'Ðÿçàíü'
myArray[5] = 'Ïñêîâ'

for(i = 0; i < 6; i++)
  alert(myArray[i])

Ýòîò êîä ñîçäà¸ò ìàññèâ è çàïîëíÿåò òîëüêî íåîáõîäèìûå ýëåìåíòû. Òåïåðü åñëè ìû ïîïðîáóåì ïîëó÷èòü çíà÷åíèå íå èíèöèàëèçèðîâàííîãî ýëåìåíòà (â ïðèìåðå ýòî ïåðâûé è òðåòèé), òî ïîëó÷èì "undefined". Èñïîëüçîâàíèå ðàçðåæåííûõ ìàññèâîâ èíîãäà î÷åíü óäîáíî, íî òðåáóåò îïûòà è âíèìàòåëüíîñòè, ïîýòîìó íà íà÷àëüíîì ýòàïå ëó÷øå îò íèõ îòêàçàòüñÿ. Êðîìå òîãî, ðàçðåæåííûå ìàññèâû íå äàþò âûãîäû ïî èñïîëüçîâàíèþ ïàìÿòè, ò.ê. ìåñòî ðåçåðâèðóåòñÿ äëÿ âñåõ ýëåìåíòîâ, â òîì ÷èñëå íå èíèöèàëèçèðîâàííûõ.

Ýëåìåíòàìè ìàññèâà ìîãóò áûòü ïåðåìåííûå ëþáîãî òèïà. Èíòåðåñíàÿ îñîáåííîñòü JavaScript - ìàññèâ ìîæåò îäíîâðåìåííî ñîäåðæàòü ýëåìåíòû ðàçëè÷íûõ òèïîâ, â òîì ÷èñëå ìàññèâû:

//
// ìàññèâ ñ ýëåìåíòàìè ðàçíûõ òèïîâ
//
var myArrayS = new Array();
myArrayS[0] = 'ßðîñëàâëü';
myArrayS[1] = 10000;
myArrayS[2] = 'ßìàë';
myArrayS[3] = 5000;

for(i = 0; i < myArrayS.length; i += 2)
	alert('Ãîðîä: ' + myArrayS[i] + '\n' + 
    	  'Íàñåëåíèå: ' + myArrayS[i + 1] + '\n')

//
// ìàññèâ ñ ýëåìåíòàìè-ìàññèâàìè
//
var myArrayA = new Array()
myArrayA[0] = new Array('ßðîñëàâëü', 10000);
myArrayA[1] = new Array('Ñòàâðîïîëü', 5000);

for(i = 0; i < myArrayA.length; i++)
	alert('Ãîðîä: ' + myArrayA[i][0] + '\n' + 
    	  'Íàñåëåíèå: ' + myArrayA[i][1] + '\n')

		

Êëàññ Array ñîäåðæèò åäèíñòâåííîå ñâîéñòâî - length, ïîçâîëÿþùåå óçíàòü òåêóùóþ äëèíó ìàññèâà:

 
var myArray = new Array();

...
// óçíàòü êîëèåê÷òâî ýëåìåíòîâ
alert(myArray.length)

// äîáàâèòü ýäåìåíò ïîñëåäíèì
myArray[myArray.length] = 'ïîñëåäíåå çíà÷åíèå'

Îáðàòèòå âíèìàíèå, ÷òî çíà÷åíèå Array.length íà åäèíèöó áîëüøå íîìåðà ïîñëåäíåãî ýëåìåíòà ìàññèâà, ò.ê. íóìåðàöèÿ â ìàññèâå íà÷èíàåòñÿ ñ íóëÿ, à ñâîéñòâî length ïîêàçûâàåò îáùåå êîëè÷åñòâî ýëåìåíòîâ.

Êëàññ Array òàê æå ñîäåðæèò ðÿä ìåòîäîâ, ñóùåñòâåííî óïðîùàþùèõ íåêîòîðûå ðóòèííûå îïåðàöèè ñ ìàññèâàìè:

Array.join() Ïîëó÷åíèå ñïèñêà ýëåìåíòîâ ìàññèâà â âèäå îäíîé ñòðîêè áåç ðàçäåëèòåëåé.
Array.join(ðàçäåëèòåëü) Ïîëó÷åíèå ñïèñêà ýëåìåíòîâ ìàññèâà â âèäå îäíîé ñòðîêè, ïðè÷åì ýëåìåíòû ìàññèâà ðàçäåëåíû ñòðîêîé "ðàçäåëèòåëü"
Array.reverse() Èçìåíåíèå ïîðÿäêà ñîðòèðîâêè ìàññèâà. Ýòîò ìåòîä "ïåðåâîðà÷èòâàåò" ìàññèâ: ïåðâûé ýëåìåíò ñòàíîâèòñÿ ïîñëåäíèì è íàîáîðîò.
Array.sort() Ñîðòèðîâêà ìàññèâà ïî àëôàâèòó. Åñëè ìàññèâ ñîäåðæèò ÷èñëîâûå äàííûå, òî ïðè ñîðòèðîâêå èñïîëüçóþòñÿ èõ ñòðîêîâûå ïðåäñòàâëåíèÿ.
Array.sort(ôóíêöèÿ_ñîðòèðîâêè) Ñîðòèðîâêà ìàññèâà ïî ïîëüçîâàòåëüñêîìó êðèòåðèþ, êîòîðûé çàäà¸òñÿ ñ ïîìîùüþ ñîáñòâåííîé ôóíêöèè ñîðòèðîâêè:

Ðàññìîòðèì íåáîëüøîé ïðèìåð:

// ôóíêöèÿ ñîðòèðîâêè ìàññèâà
function sortByLength(a, b)
{
		if(a.length > b.length) return 1;
		else
			if(a.length = b.length) return 0;
			else return -1;
}

// èíèöèàëèçàöèÿ ìàññèâà
var myArray = new Array()
myArray[0] = 'ßðîñëàâëü'
myArray[1] = 'ßìàë'
myArray[2] = 'Ñòàâðîïîëü'
myArray[3] = 'Îìñê'
myArray[4] = 'Àíàïà'

alert('èñõîäíûé ìàññèâ:\n\n' + myArray.join('\n'))

// ñîðòèðóåì ïî àëôàâèòó
myArray.sort();
alert('ñîðòèðîâàííûé ïî àëôàâèòó:\n\n' + myArray.join('\n'))

// ñîðòèðóåì â îáðàòíîì ïîðÿäêå		
myArray.reverse();
alert('ïåðåâ¸ðíóòûé:\n\n' + myArray.join('\n'))

// ñîðòèðóåì ïî äëèíå ñ ïîìîùüþ ñîáñòâåííîé ôóíêöèè		
myArray.sort(sortByLength);
alert('ñîðòèðîâàííûé ïî äëèíå:\n\n' + myArray.join('\n'))

Êàê âèäèòå, ïîëüçîâàòüñÿ ìåòîäàìè ìàññèâà î÷åíü ïðîñòî. Ñàìîå èíòåðåñíîå â ýòîì ïðèìåðå - ôóíêöèÿ ñîðòèðîâêè. Îíà äîëæíà âñåãäà èìåòü äâà ïàðàìåòðà è âîçâðàùàòü ÷èñëî. Ïîðÿäîê ñîðòèðîâêè îïðåäåëÿåòñÿ çíàêîì âîçâðàùàåìîãî ÷èñëà. Åñëè ÷èñëî îòðèöàòåëüíîå - ïåðâûé àðãóìåíò äîëæåí â ìàññèâå ðàñïîëàãàòüñÿ ðàíüøå âòîðîãî, åñëè ïîëîæèòåëüíîå - ïîçæå. Åñëè ýëåìåíòû ðàâíû, òî îáû÷íî âîçâðàùàåòñÿ íîëü, à ïîðÿäîê ýëåìåíòîâ íå èçìåíÿåòñÿ.

 JavaScript1.1 è âûøå ðåàëèçîâàíû äîïîëíèòåëüíûå ñâîéñòâà è ìåòîäû ìàññèâîâ, ðàñøèðÿþùèå âîçìîæíîñòè äëÿ ïðîãðàììèñòîâ. Íàïðèìåð, äîáàâëåíû ìåòîäû concat() è slice(), ïîçâîëÿþùèå ñîáúåäèíèòü ìàññèâû è ïîëó÷èòü êóñîê ìàññèâà ñîîòâåòñòâåííî. Ê ñîæàëåíèþ, åù¸ íå âñå áðàóçåðû ïîääåðæèâàþò JavaScript1.1 è JavaScript1.2, ïîýòîìó ïðè ðàçðàáîòêå êðîññáðàóçåðíûõ ñêðèïòîâ èñïîëüçîâàòü íîâûå íåñòàíäàðòíûå ñâîéñòâà è ìåòîäû íàäî î÷åíü àêêóðàòíî.

Òàêèì îáðàçîì, ìàññèâû - ýòî îäèí èç íàèáîëåå ãèáêèõ è óäîáíûõ ìåõàíèçìîâ JavaScript, ò.ê. ïîçâîëÿåò ñ ë¸ãêîñòüþ ìàíèïóëèðîâàòü äàæå îòíîñèòåëüíî áîëüøèìè îáúåìàìè äàííûõ. Ìàññèâû íàäî èñïîëüçîâàòü âåçäå, ãäå çàðàíåå íåèçâåñòíî êîëè÷åñòâî õðàíèìûõ äàííûõ è èõ òèï.

Ñ äðóãîé ñòîðîíû, óâëåêàòüñÿ è äåëàòü ìàññèâû èç îäíîãî-äâóõ ýëåìåíòîâ òîæå íå ñòîèò. Ïåðåä ñîçäàíèåì ìàññèâà ïîäóìàéòå, à òî÷íî ëè îí íóæåí? Êàê ïîêàçûâàåò ïðàêòèêà - â ïîëîâèíå ñëó÷àåâ ïðîùå îáîéòèñü äâóìÿ ëèøíèìè ïåðåìåííûìè.



 íà÷àëî ñòðàíèöû



 íà÷àëî ñòðàíèöû