JavaScript: Array
7.1 Pengantar
Array adalah sekelompok lokasi memori
yang bertetangga yang memiliki nama sama dan tipe sama. Untuk merujuk ke lokasi
tertentu dalam memori atau sebuah elemen di dalam suatu array, Anda perlu
menspesifikasi nama array dan nomor posisi elemen yang ditunjuk. Nomor posisi
adalah nilai yang mengindikasikan lokasi spesifik di dalam array.
7.2 Array
Gambar 7.1 menampilkan sebuah array
integer bernama arrayAngka. Array
ini memuat 12 elemen, yang semuanya dapat dirujuk dengan memberikan nama
diikuti dengan nomor posisi elemen (diapit dalam kurung). Elemen pertama di
dalam setiap array adalah elemen ke nol. Jadi, elemen pertama pada array arrayAngka dirujuk sebagai arrayAngka[0], elemen kedua sebagai arrayAngka[1], array ketujuh sebagai arrayAngka[6], dan seterusnya. Elemen
ke-i arrayAngka dinyatakan sebagai arrayAngka[i-1].
Gambar 7.1 Sebuah array
yang memuat 12 elemen
Nomor posisi di dalam kurung secara
formal dinamakan dengan indeks (atau subskrip). Indeks adalah sebuah integer
atau ekspresi integer. Perhatikan bahwa nama array bersubskrip merupakan ekspresi sisi-kiri,
dimana ia dapat digunakan di sisi kiri dari sebuah penugasan untuk menempatkan
suatu nilai baru ke dalam elemen array. Ia dapat pula digunakan di sisi kanan
sebuah penugasan untuk menugaskan nilainya ke variabel lain.
Anda perlu mengamati array arrayAngka pada Gambar 7.1 secara lebih
dekat. Nama array adalah arrayAngka.
Panjang dari arrayAngka adalah 12
dan dapat dicari menggunakan ekspresi berikut:
arrayAngka.length
Setiap array di dalam JavaScript
mengetahui panjangnya sendiri. Dua belas elemen array tersebut dirujuk sebagai arrayAngka[0] sampai arrayAngka[11].
Nilai dari arrayAngka[0] adalah -45,
nilai dari arrayAngka[1] adalah 6,
nilai dari arrayAngka[7] adalah 62,
dan nilai dari ArrayAngka[11] adalah
78. Nilai-nilai yang disimpan di dalam array dapat digunakan dalam berbagai
kalkulasi dan aplikasi.
Kurung siku yang mengapit subskrip
array adalah sebuah operator JavaScript. Kurung siku memiliki derajat keutamaan
yang sama dengan kurung biasa. Tabel pada Gambar 7.2 menunjukkan derajat
keutamaan dan asosiatifitas operator-operator yang telah diintroduksi sejauh
ini. Semuanya ditampilkan dari atas ke bawah dengan urutan keutamaan menurun.
Operator
|
Asosiatifitas
|
Tipe
|
() [] .
|
kiri ke kanan
|
tertinggi
|
++ -- !
|
kanan ke kiri
|
unary
|
* / %
|
kiri ke kanan
|
multiplikatif
|
+ -
|
kiri ke kanan
|
aditif
|
< <= > >=
|
kiri ke kanan
|
relasional
|
== !=
|
kiri ke kanan
|
ekualitas
|
&&
|
kiri ke kanan
|
AND logikal
|
||
|
kiri ke kanan
|
OR logikal
|
?:
|
kanan ke kiri
|
kondisional
|
= += -= *=
/= %=
|
kanan ke kiri
|
penugasan
|
Gambar 7.2 Derajat keutamaan dan asosiatifitas semua operator yang telah
didiskusikan sejauh ini
7.3 Mendeklarasikan
dan Mengalokasikan Array
Setiap array menempati ruang di dalam
memori. Array dalam JavaScript adalah sebuah objek Array. Anda menggunakan operator new untuk mengalokasikan secara dinamis (meminta memori untuk)
sejumlah elemen yang diperlukan tiap array. Operator new menciptakan sebuah objek ketika program dieksekusi dengan
memperoleh memori yang cukup dalam menyimpan objek tersebut dengan tipe yang ditetapkan
di sebelah kanan new. Proses penciptaan objek baru dikenal dengan
penciptaan instans atau instansiasi objek, dan operator new dikenal sebagai operator alokasi memori dinamis. Array
adalah objek yang harus diciptakan menggunakan new. Untuk mengalokasikan 12 elemen untuk array integer c, digunakan statemen
var
c = new Array( 12 );
Statemen tersebut dapat pula dilakukan
dengan dua langkah, sebagai berikut:
var c; // mendeklarasikan
array
c = new Array( 12 );
// mengalokasikan array
Ketika array dialokasikan, bila setiap
elemen tidak diinisialisasi, maka ia memiliki nilai undefined.
7.4
Contoh Penggunaan Array
Bagian ini akan menyajikan beberapa
contoh penciptaan dan pemanipulasian array.
Menciptakan
dan Menginisialisasi Array
Skrip pada Gambar 7.3 menggunakan
operator new untuk mengalokasikan
sebuah Array dengan lima elemen dan
sebuah array kosong. Skrip mendemonstrasikan penginisialisasian sebuah Array dan juga menunjukkan bahwa sebuah
Array dapat berkembang secara
dinamis untuk mengakomodasi elemen-elemen baru. Nilai-nilai Array ditampilkan
pada tabel XHTML.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
<?xml
version = "1.0" encoding = "utf-8"?>
<!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
Gambar 7.3: InisialisasiArray.html -->
<!--
Penginisialisasian elemen-elemen sebuah array. -->
<html xmlns =
"http://www.w3.org/1999/xhtml">
<head>
<title>Penginisialisasian
sebuah Array</title>
<style type =
"text/css">
table { width: 10em }
th { text-align: left }
</style>
<script type =
"text/javascript">
<!--
// menciptakan(mendeklarasikan)
dua array baru
var n1 = new Array(
5 ); // mengalokasikan Array
lima-elemen Array
var n2 = new
Array(); // mengalokasikan Array kosong
// menugaskan nilai-nilai pada tiap
elemen dari Array n1
for ( var i = 0; i <
n1.length; ++i )
n1[ i ] = i;
// menciptakan dan
menginisialisasi lima elemen di dalam Array n2
for ( i = 0; i < 5; ++i
)
n2[ i ] = i;
tampilArray( "Array n1:",
n1 );
tampilArray( "Array n2:",
n2 );
// menampilkan kepala tabel
dua-kolom
// yang memuat subskrip dan
elemen-elemen "sArray"
function tampilArray(
kepala, sArray )
{
document.writeln( "<h2>"
+ kepala + "</h2>" );
document.writeln( "<table
border = \"1\"" );
document.writeln( "<thead><th>Subskrip</th>"
+
"<th>Nilai</th></thead><tbody>"
);
// menampilkan subskrip dan
nilai tiap elemen array
for ( var i =
0; i < sArray.length; i++ )
document.writeln( "<tr><td>"
+ i + "</td><td>" +
sArray[ i ] + "</td></tr>"
);
document.writeln( "</tbody></table>"
);
} // akhir fungsi tampilArray
// -->
</script>
</head><body></body>
</html>
|
Baris 17 menciptakan Array n1 sebagai sebuah array lima
elemen. Baris 18 menciptakan Array n2
sebagai sebuah array kosong. Baris 21-22 menggunakan sebuah statemen for untuk menginisialisasi
elemen-elemen dari n1 dengan nomor
subskripnya (0 sampai 4). Perhatikan kegunaan ekspresi n1.length pada kondisi di dalam statemen for untuk menentukan panjang array. Pada contoh ini, panjang array
adalah 5, jadi loop akan tetap dieksekusi sepanjang nilai dari variabel kendali
kurang dari 5. Untuk sebuah array lima-elemen, nilai subskrip adalah 0 sampai
4, jadi penggunaan operator kurang dari, <,
akan menjamin bahwa loop tidak mencoba mengakses sebuah elemen melebihi akhir
array.
Gambar 7.3 Penginisialisasian elemen-elemen sebuah array
Baris 25-26 menggunakan sebuah statemen
for untuk menambahkan lima elemen
pada Array n2 dan menginisialisasi
setiap elemen dengan nomor subskripnya (0 sampai 4). Perhatikan bahwa Array n2 dapat mengembang secara
dinamis untuk mengakomodasi nilai-nilai yang ditugaskan pada tiap elemen array.
Baris 28-29 memanggil fungsi tampilArray (didefinisikan pada baris
33-46) untuk menampilkan isi tiap array pada tabel XHTML. Fungsi tampilArray menerima dua argumen, yaitu
sebuah string untuk ditampilkan yang terletak sebelum tabel XHTML yang
menampilkan isi array dan array yang akan ditampilkan. Baris 41-43 menggunakan
sebuah statemen for untuk menampilkan teks XHTML yang mendefinisikan tiap baris
dari tabel.
Jika nilai dari tiap elemen Array telah diketahui sebelumnya,
elemen-elemen tersebut dapat dialokasikan dan diinisialisasi di dalam deklarasi
array. Ada dua cara dalam menentapkan nilai awal. Statemen
var n
= [ 10, 20, 30, 40, 50 ];
menggunakan sebuah daftar
penginisialisasi dipisahkan-koma yang diapit di dalam sepasang kurung siku ([
dan ]) untuk menciptakan sebuah Array
lima-elemen dengan subskrip 0, 1, 2, 3, dan 4. Ukuran array ditentukan oleh
jumlah nilai di dalam daftar penginisialisasi. Perhatikan bahwa deklarasi
tersebut tidak memerlukan operator new
dalam menciptakan objek Array.
Fungsionalitas ini disediakan oleh penerjemah JavaScript ketika ia menjumpai
sebuah deklarasi array yang memuat suatu daftar penginisialisasi. Statemen
var n
= new Array( 10, 20, 30, 40, 50 );
juga menciptakan sebuah array
lima-elemen dengan subskrip 0, 1, 2, 3, dan 4. Pada kasus ini, nilai-nilai awal
array ditetapkan sebagai argumen yang diapit sepasang kurung (terletak setelah new Array). Ukuran array ditentukan
oleh jumlah nilai di dalam kurung. Adalah hal yang juga memungkinkan untuk
mencadangkan ruang di dalam suatu Array untuk sebuah nilai yang akan ditetapkan belakangan menggunakan
koma di dalam daftar penginisialiasi. Sebagai contoh, statemen
var n
= [ 10, 20, , 40, 50 ];
menciptakan sebuah array lima-elemen,
dimana elemen ketiga belum ditetapkan (n[2]).
Menginisialisasi
Array dengan Daftar Penginisialisasi
Skrip pada Gambar 7.4 menciptakan tiga
objek Array untuk mendemonstrasikan penginisialisasian array dengan daftar
penginisialisasi (baris 18-20) dan menampilkan tiap array pada tabel XHTML
menggunakan fungsi tampilArray yang
sama dengan Gambar 7.3. Perhatikan bahwa ketika Array integer2
ditampilkan pada halaman web, elemen-elemen dengan subskrip 1 dan 2 (elemen
kedua dan elemen ketiga dari array) muncul di halaman web sebagai undefined. Ada dua elemen yang nilainya
tidak disediakan di dalam deklarasi pada baris 20.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
<?xml
version = "1.0" encoding = "utf-8"?>
<!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
Gambar 7.4: InisialisasiArray2.html -->
<!--
Pendeklarasian dan penginisialisasian array. -->
<html xmlns =
"http://www.w3.org/1999/xhtml">
<head>
<title>Penginisialisasian
Array dengan Deklarasi</title>
<style type =
"text/css">
table { width: 15em }
th { text-align: left }
</style>
<script type =
"text/javascript">
<!--
// Daftar penginisialisasi
menentapkan jumlah elemen
// dan nilai untuk tiap elemen.
var warna = new
Array( "cyan", "magenta","kuning",
"hitam" );
var integer1 = [ 2, 4, 6,
8 ];
var integer2 = [ 2, , , 8
];
tampilArray( "Array warna
memuat", warna);
tampilArray( "Array
integer1 memuat", integer1 );
tampilArray( "Array
integer2 memuat", integer2 );
// menampilkan kepala tabel
dua-kolom
// yang memuat subskrip dan
elemen-elemen "sArray"
function tampilArray(
kepala, sArray )
{
document.writeln( "<h2>"
+ kepala + "</h2>" );
document.writeln( "<table
border = \"1\"" );
document.writeln( "<thead><th>Subskrip</th>"
+
"<th>Nilai</th></thead><tbody>"
);
// menampilkan subskrip dan
nilai tiap elemen array
for ( var i =
0; i < sArray.length; i++ )
document.writeln( "<tr><td>"
+ i + "</td><td>" +
sArray[ i ] + "</td></tr>"
);
document.writeln( "</tbody></table>"
);
} // akhir fungsi tampilArray
// -->
</script>
</head><body></body>
</html>
|
Gambar 7.4 Pendeklarasian dan penginisialisasian array
Menjumlahkan
Elemen-Elemen Array dengan for dan for...in
Skrip pada Gambar 7.5 menjumlahkan
nilai-nilai yang dimuat di dalam sArray,
sebuah array integer 10-elemen yang dideklarasikan, dialokasikan, dan
diinisialisasi pada baris 13. Statemen pada baris 19 di dalam tubuh statemen for yang pertama melakukan penjumlahan.
Perhatikan bahwa nilai-nilai yang disuplai oleh penginisialisasi untuk array sArray dapat dibaca ke dalam program
menggunakan formulir XHTML.
Pada contoh ini, akan dikenalkan
statemen for...in, yang memampukan
sebuah skrip untuk melakukan sebuah tugas terhadap setiap elemen array. Baris
25-26 menunjukkan sintaks statemen for...in.
Di dalam kurung, Anda mendeklarasikan variabel elemen yang digunakan untuk memilih setiap elemen di dalam objek di
sebelah kanan katakunci in (sArray pada kasus ini). Ketika
menggunakan for...in, JavaScript
secara otomatis menentukan jumlah elemen array. Dengan beriterasinya penerjemah
JavaScript menjelajahi elemen-elemen sArray,
variabel elemen ditugasi sebuah nilai yang dapat dipakai sebagai subskrip untuk
sArray. Pada kasus sebuah Array, nilai yang ditugaskan adalah
subskrip dalam rentang 0 sampai sArray.length-1.
Setiap nilai ditambahkan ke total2
untuk menghasilkan penjumlahan atas semua elemen array.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
<?xml
version = "1.0" encoding = "utf-8"?>
<!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
Gambar 7.5: jumArray.html -->
<!--
Penjumlahan elemen-elemen sebuah array. -->
<html xmlns =
"http://www.w3.org/1999/xhtml">
<head>
<title>Penjumlahan
Elemen-Elemen Array</title>
<script type =
"text/javascript">
<!--
var sArray = [ 1, 2, 3, 4,
5, 6, 7, 8, 9, 10 ];
var total1 = 0, total2 =
0;
// beriterasi melalui
elemen-elemen array secara berurutan
// dan menambahkan nilai tiap
elemen pada total1
for ( var i = 0; i
< sArray.length; i++ )
total1 += sArray[ i ];
document.writeln( "Total
menggunakan subskrip: " + total1 );
// beriterasi melalui
elemen-elemen array menggunakan for... in
// untuk menambahkan nilai tiap
elemen pada total2
for ( var elemen in
sArray )
total2 += sArray[ elemen ];
document.writeln( "<br
/>Total menggunakan for...in: " + total2 );
// -->
</script>
</head><body></body>
</html>
|
Gambar 7.5 Penjumlahan elemen-elemen sebuah array
Menggunakan
Elemen-Elemen Array sebagai Pencacah
Pada Bab 7, telah diberikan sebuah cara
untuk mengimplementasikan program pelemparan-dadu pada Gambar 7.4. Program
tersebut melemparkan sebuah dadu enam-sisi sebanyak 6000 kali dan menggunakan
statemen switch untuk mencari total
kemunculan tiap nilai yang dilempar. Versi array dari skrip tersebut
ditunjukkan pada Gambar 7.6. Statemen switch
pada Gambar 7.4 diganti dengan baris 24 pada program ini. Baris ini menggunakan
nilai muka acak sebagai subskrip
untuk array frekuensi dalam
menentukan elemen mana yang akan diinkremen pada tiap iterasi loop. Karena
perhitungan angka acak pada baris 23 menghasilkan angka-angka dari 1 sampai 6,
array frekuensi harus cukup besar
untuk memuat nilai skrip dari 1 sampai 6. Pada program ini, Anda mengabaikan
elemen 0 dari array frekuensi dan
hanya menggunakan elemen-elemen yang berkaitan dengan nilai-nilai sisi sebuah
dadu. Selain itu, baris 32-34 pada program ini menggunakan sebuah loop untuk
menghasilkan tabel yang ditulis satu baris per waktu pada Gambar 7.4.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
<?xml
version = "1.0" encoding = "utf-8"?>
<!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
Gambar 7.6: LemparDadu2.html -->
<!--
Program pelemparan-dadu menggunakan array menggantikan switch. -->
<html xmlns =
"http://www.w3.org/1999/xhtml">
<head>
<title>Melempar sebuah
Dadu Enam-Sisi 600 Kali</title>
<style type =
"text/css">
table { width: 15em }
th { text-align: left }
</style>
<script type =
"text/javascript">
<!--
var muka;
var frekuensi = [ , 0, 0,
0, 0, 0, 0 ]; // membiarkan frekuensi[0]
// tak-terinisialisasi
// menyimpulkan hasil
for ( var lempar =
1; lempar <= 6000; ++lempar )
{
muka = Math.floor( 1 +
Math.random() * 6 );
++frekuensi[ muka ];
} // akhir for
document.writeln( "<table
border = \"1\"><thead>" );
document.writeln( "<th>Muka</th>"
+
"<th>Frekuensi</th></thead><tbody>"
);
// menghasilkan tabel frekuensi
tiap muka dadu
for ( muka = 1; muka <
frekuensi.length; ++muka )
document.writeln( "<tr><td>"
+ muka + "</td><td>" +
frekuensi[ muka ] + "</td></tr>"
);
document.writeln( "</tbody></table>"
);
// -->
</script>
</head>
<body>
<p>Klik Refresh untuk
menjalankan skrip ini kembali</p>
</body>
</html>
|
Gambar 7.6 Program pelemparan-dadu menggunakan array menggantikan switch
7.5
Pembangkit Citra Acak Menggunakan Array
Pada Bab 7, telah diciptakan sebuah
pembangkit citra acak yang mengharuskan file-file citra dinamai dengan 1.gif,
2.gif, ..., 7.gif. Pada contoh ini (Gambar 7.7), Anda menciptakan pembangkit
citra acak yang lebih elegan yang tidak mengharuskan nama-nama file berupa
integer. Versi pembangkit citra acak ini menggunakan sebuah array gambar untuk menyimpan setiap nama file
citra sebagai string. Skrip membangkitkan integer acak dan menggunakannya
sebagai subskrip pada array gambar.
Skrip menampilkan elemen img XHTML
dengan atribut src yang memuat nama
file citra.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<?xml
version = "1.0" encoding = "utf-8"?>
<!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
Gambar 7.7: CitraAcak2.html -->
<!--
Pembangkitan citra acak menggunakan array. -->
<html
xmlns = "http://www.w3.org/1999/xhtml">
<head>
<title>Pembangkit Citra
Acak</title>
<style type = "text/css">
table { width: 15em }
th { text-align: left }
</style>
<script type =
"text/javascript">
<!--
var gambar =
[ "CPE",
"EPT", "GPP", "GUI", "PERF",
"PORT", "SEO" ];
// memilih sebuah citra acak dari
array gambar dan menampilkan
// dengan menciptakan sebuah tag
img dan menyambungkan atribut
// src dengan nama file
document.write ( "<img
src = \"" +
gambar[ Math.floor(
Math.random() * 7 ) ] + ".gif\" />" );
// -->
</script>
</head>
<body>
<p>Klik Refresh untuk
menjalankan skrip ini kembali</p>
</body>
</html>
|
Gambar 7.7 Pembangkitan citra acak menggunakan array
Skrip mendeklarasikan array gambar pada baris 16-17 dan
menginisialisasinya dengan nama-nama file citra. Baris 22-23 menciptakan tag img yang menampilkan citra acak pada
halaman web. Baris 22 membuka tag img
dan memulai atribut src. Baris 23
membangkitkan integer acak dari 0 sampai 6 sebagai indeks bagi array gambar. Ekspresi
gambar[
Math.floor( Math.random() * 7 )
]
dievaluasi menjadi sebuah string dari
array gambar, yang kemudian
dituliskan ke dokumen (baris 23). Baris 23 menyempurnakan tag img dengan ekstensi file citra (.gif).
7.6
Referensi dan Parameter Referensi
Dua cara melewatkan argumen kepada
fungsi (atau metode) dalam banyak bahasa pemrograman adalah
pelewatan-dengan-nilai dan pelewatan-dengan-referensi. Ketika sebuah argumen
dilewatkan kepada sebuah fungsi lewat nilai, salinan dari nilai argumen itu
dibuat dan dilewatkan kepada fungsi yang dipanggil. Dalam JavaScript, angka, nilai
boolean, dan string dilewatkan kepada fungsi lewat nilai.
Dengan pelewatan-dengan-referensi, pemanggil
memberikan fungsi terpanggil akses langsung terhadap data pemanggil dan
membolehkannya untuk memodifikasi data jika diperlukan. Prosedur ini dicapai
melalui pelewatan kepada fungsi terpanggil alamat lokasi di dalam memori dimana
data berada. Pelewatan-dengan-referensi dapat memperbaiki kinerja karena ia
menghilangkan kebutuhan akan penyalinan data, terutama bila yang terlibat
adalah data besar. Tetapi, hal ini juga dapat memperlemah keamanan karena
fungsi terpanggil dapat mengakses data pemanggil. Dalam JavaScript, semua objek
(jadi termasuk Array) dilewatkan
kepada fungsi lewat referensi.
Untuk melewatkan sebuah referensi objek
kepada sebuah fungsi, Anda hanya perlu menetapkan nama referensi pada
pemanggilan fungsi. Biasanya, namareferensi merupakan pengenal yang digunakan
program untuk memanipulasi objek. Pada bagian selanjutnya, akan
didemonstrasikan pelewatan-dengan-nilai dan pelewatan-dengan-referensi
menggunakan array.
7.7
Pelewatan Array kepada Fungsi
Untuk melewatkan sebuah argumen array
kepada fungsi (Gambar 7.8), Anda perlu menetapkan nama array (sebuah referensi
terhadap array) tanpa kurung siku. Sebagai contoh, jika array suhuPerJam dideklarasikan sebagai
var
suhuPerJam = new Array( 24
);
maka pemanggilan fungsi
modifikasiArray(
suhuPerJam );
akan melewatkan array suhuPerJam kepada fungsi modifikasiArray. Seperti disebutkan
sebelumnya, setiap objek array dalam JavaScript mengetahui ukurannya sendiri
(melalui atribut length). Jadi, ketika Anda melewatkan sebuah objek array
kepada fungsi, Anda tidak perlu melewatkan ukuran array secara terpisah sebagai
argumen. Gambar 7.3 mengilustrasikan konsep ini ketika Anda melewatkan Array n1 dan n2 kepada fungsi tampilArray untuk menampilkan isi tiap Array.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
<?xml
version = "1.0" encoding = "utf-8"?>
<!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
Gambar 7.8: PelewatanArray.html -->
<!--
Pelewatan array dan elemen array individual kepada fungsi. -->
<html
xmlns = "http://www.w3.org/1999/xhtml">
<head>
<title>Pelewatan array
dan elemen array individual
kepada fungsi</title>
<script type =
"text/javascript">
<!--
var a = [ 1, 2, 3, 4, 5 ];
document.writeln( "<h2>Pengaruh
pelewatan keseluruhan " +
"array lewat
referensi</h2>" );
tampilArray( "Array asli:
", a );
modifikasiArray( a ); // array a
dilewatkan dengan referensi
tampilArray( "Array termodifikasi:
", a );
document.writeln( "<h2>Pengaruh
pelewatan elemen array " +
"dengan
nilai</h2>" +
"a[3] sebelum
modifikasiElemen: " + a[ 3 ] );
modifikasiElemen( a[ 3 ] ); // elemen array a[3] dilewatkan dengan nilai
document.writeln( "<br
/>a[3] setelah modifikasiElemen: " +
a[ 3 ] );
// menampilkan judul diikuti dengan isi dari sArray
function tampilArray( kepala,
sArray)
{
document.writeln(
kepala + sArray.join(
" " ) + "<br />" );
} // akhir fungsi tampilArray
// fungsi yang memodifikasi
elemen-elemen sebuah array
function modifikasiArray(
sArray )
{
for ( var j in
sArray )
sArray[ j ] *= 2;
} // akhir fungsi modifikasiArray
// fungsi yang memodifikasi nilai
yang dilewatkan
function modifikasiElemen(
e )
{
e *= 2; // menskalakan elemen
e hanya selama di dalam
// fungsi
document.writeln( "<br
/>nilai di dalam modifikasiElemen: " +
e );
} // akhir fungsi
modifikasiElemen
// -->
</script>
</head><body></body>
</html>
|
Gambar 7.8 Pelewatan array dan elemen array individual kepada fungsi
Meskipun array secara menyeluruh
dilewatkan melalui referensi, elemen array boolean dan numerik secara
individual dilewatkan dengan nilai sama persis seperti variabel boolean dan
numerik ketika dilewatkan kepada fungsi. Untuk melewatkan sebuah elemen array
kepada fungsi, digunakan nama bersubskrip dari elemen sebagai argumen dalam
pemanggilan fungsi.
Bagi sebuah fungsi agar dapat meneriman
suatu Array melalui pemanggilan
fungsi, daftar parameter fungsi harus menetapkan sebuah parameter yang akan
merujuk ke Array dalam tubuh fungsi.
Tidak seperti bahasa pemrograman lainnya, JavaScript tidak memiliki sintaks
spesial untuk kepentingan ini. JavaScript hanya mensyaratkan bahwa pengenal
untuk Array harus ditetapkan di
dalam daftar parameter. Sebagai contoh, header fungsi untuk fungsi modifikasiArray yang ditulis sebagai
function modifikasiArray(
b )
mengindikasikan bahwa modifikasiArray mengharap menerima
sebuah parameter bernama b (argumen
yang disuplai di dalam pemanggilan fungsi haruslah berupa sebuah Array). Array dilewatkan dengan
referensi, dan oleh karena itu ketika fungsi terpanggil menggunakan nama array b, ia merujuk ke array aktual di dalam
pemanggil. Skrip pada Gambar 7.8. mendemonstrasikan perbedaan antara pelewatan
array secara menyeluruh dan pelewatan sebuah elemen array.
Statemen pada baris 17 memanggil fungsi
tampilArray untuk menampilkan isi
dari array a sebelum ia dimodifikasi. Fungsi tampilArray (didefinisikan pada baris 32-36) menerima sebuah string
untuk ditampilkan dan array untuk ditampilkan. Statemen pada baris 34-35
menggunakan metode join untuk
menciptakan sebuah string yang memuat semua elemen-elemen di dalam sArray. Metode join mengambil sebagai argumennya sebuah string yang memuat pemisah yang dipakai untuk memisahkan
antar elemen array di dalam string yang dijadikan nilai balik. Jika argumen
tersebut tidak ditetapkan, maka string kosong digunakan sebagai pemisah.
Baris 19 memanggil fungsi modifikasiArray (baris 39-43) dan
melewatkan kepadanya array a. Fungsi
modifikasiArray mengalikan setiap
elemen dengan 2. Untuk mengilustrasikan bahwa elemen-elemen array a telah termodifikasi, statemen pada
baris 21 memanggil fungsi tampilArray
kembali untuk menampilkan isi array a
setelah ia dimodifikasi. Seperti tertampil pada keluaran program, elemen-elemen
dari array a justru dimodifikasi
oleh modifikasiArray.
Untuk menunjukkan nilai dari a[3] sebelum pemanggilan terhadap modifikasiArray, baris 25 menampilkan
nilai dari a[3]. Baris 27 memanggil modifikasiArray (baris 46-51) dan
melewatkan a[3] sebagai argumen.
Ingat bahwa a[3] sebenarnya
merupakan satu nilai integer di dalam array a. Ingat pula bahwa nilai numerik dan nilai boolean selalu
dilewatkan kepada fungsi melalui nilai. Oleh karena itu, salinan dari a[3] dilewatkan. Fungsi modifikasiElemen mengalikan argumennya
dengan 2 dan menyimpan hasilnya di dalam parameter e. Parameter dari fungsi modifikasiElemen
merupakan variabel lokal di dalam fungsi tersebut, jadi ketika fungsi berhenti,
variabel lokal tidak lagi dapat diakses. Jadi, ketika kendali program kembali
ke skrip utama, nilai tak-termodifikasi dari a[3] ditampilkan oleh statemen pada baris 29.
7.8
Pengurutan Array
Objek Array dalam JavaScript memiliki sebuah metode built-in, sort, untuk mengurutkan array. Gambar 7.9
mendemonstrasikan metode sort dari
objek Array.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<?xml
version = "1.0" encoding = "utf-8"?>
<!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
Gambar 7.9: Pengurutan.html -->
<!--
Pengurutan sebuah array dengan sort. -->
<html xmlns =
"http://www.w3.org/1999/xhtml">
<head>
<title>Pengurutan sebuah Array
dengan Metode sort</title>
<script type =
"text/javascript">
<!--
var a = [ 10, 1, 9, 2, 8,
3, 7, 4, 6, 5 ];
document.writeln( "<h1>Pengurutan
sebuah Array</h1>" );
tampilArray( "Item-item
data dengan urutan asli: ", a );
a.sort( bandingkanInteger ); //
mengurutkan array
tampilArray( "Item-item
data dengan urutan menaik: ",
a );
// menampilkan judul diikuti
dengan isi dari sArray
function tampilArray(
kepala, sArray )
{
document.writeln( "<p>"
+ kepala +
sArray.join( "
" ) + "</p>" );
} // akhir fungsi tampilArray
// fungsi untuk membandingkan
function
bandingkanInteger( nilai1, nilai2 )
{
return parseInt(
nilai1 ) - parseInt( nilai2 );
} // akhir fungsi
bandingkanInteger
// -->
</script>
</head><body></body>
</html>
|
Gambar 7.9 Pengurutan sebuah array menggunakan metode sort dari objek Array
Secara default, metode sort (tanpa argumen) menggunakan
perbandingan string untuk menentukan urutan pengurutan atas elemen-elemen Array. String dibandingkan menggunakan
nilai-nilai ASCII dari karakter-karakternya. Pada contoh ini, akan diurutkan
sebuah array yang memuat integer-integer.
Metode sort mengambil argumen opsionalnya berupa nama sebuah fungsi
(dinamakan sebagai fungsi komparator) yang membandingkan kedua argumennya dan
menghasilkan salah satu dari berikut:
·
Sebuah nilai negatif jika argumen pertama kurang
dari argumen kedua.
·
Nol jika kedua argumen sama.
·
Sebuah nilai positif jika argumen pertama lebih
dari argumen kedua.
Contoh ini menggunakan fungsi bandingkanInteger (didefinisikan pada
baris 27-30) sebagai fungsi komparator untuk metode sort. Fungsi itu menghitung perbedaan antara nilai integer dari dua
argumennya (fungsi parseInt memastikan
bahwa kedua argumen ditangani sebagai integer). Jika argumen pertama kurang dari
argumen kedua, maka selisihnya akan berupa suatu nilai negatif. Jika kedua
argumen sama, maka selisihnya akan nol. Jika argumen pertama lebih dari argumen
kedua, maka selisihnya akan berupa suatu nilai positif.
Baris 16 memanggil metode sort dari objek Array dan melewatkan nama fungsi bandingkanInteger sebagai argumen. Metode sort menerima fungsi bandingkanInteger
sebagai argumen, kemudian menggunakan fungsi itu untuk membandingkan
elemen-elemen Array dalam
mengurutkan array tersebut.
7.9
Array Multidimensi
Array multidimensi dengan dua subskrip
seringkali dipakai untuk merepresentasikan tabel dengan nilai-nilai memuat
informasi yang ditata dalam baris dan kolom. Untuk mengidentifikasi elemen
tabel tertentu, Anda perlu menetapkan dua subskrip: subskrip pertama
mengidentifikasi baris dan subskrip kedua mengidentifikasi kolom. Array yang memerlukan dua subskrip dalam
mengidentifikasi elemen tertentu dinamakan dengan array dua-dimensi.
Array multidimensi dapat memiliki lebih
dari dua dimensi. JavaScript tidak mendukung keberadaan array multidimensi
secara langsung, tetapi membolehkan Anda untuk menetapkan array dengan
elemen-elemen yang juga merupakan array. Ketika sebuah array memuat array-array
satu-dimensi sebagai elemen-elemennya, Anda dapat membayangkan array-array
satu-dimensi tersebut sebagai baris-baris sebuah tabel, dan posisi-posisinya
sebagai kolom-kolom. Gambar 7.10 mengilustrasikan sebuah array dua-dimensi
bernama a yang memuat tiga baris dan
empat kolom (sebuah array
tiga-kali-empat, atau tiga array satu-dimensi dengan 4 elemen). Secara umum,
sebuah array dengan m baris dan n kolom disebut dengan sebuah array m-kali-n.
Setiap elemen di dalam array a diidentifikasi pada Gambar 7.10
menggunakan sebuah nama elemen dalam format a[i][j]; a adalah nama
array, dan i dan j adalah subskrip yang secara unik
mengidentifikasi baris dan kolom dari tiap elemen array. Perhatikan bahwa nama
tiap elemen pada baris pertama memiliki subskrip pertama 0; nama tiap elemen
pada kolom keempat memiliki subskrip kedua 3.
Gambar 7.10 Array dua-dimensi dengan tiga baris dan empat kolom
Array
yang Memuat Array-Array Satu-Dimensi
Array b dengan dua baris dan dua kolom dapat dideklarasikan dan
diinisialisasi dengan statemen
var
b = [ [ 1, 2
], [ 3, 4
] ];
Nilai-nilai dikelompokkan secara baris
dalam kurung-kurung siku. Array [1, 2]
menginisialisasi elemen b[0], dan
array [3, 4] menginisialisasi elemen
b[1]. Jadi, 1 dan 2 menginisialisasi
b[0][0] dan b[1][1]. Penerjemah menentukan jumlah baris dengan menghitung
jumlah daftar sub-penginisialisasi, yaitu array-array bersarang di dalam array
sebelah luar. Penerjeman menentukan jumlah kolom pada tiap baris dengan
menentukan jumlah nilai di dalam sub-array yang menginisialisasi baris.
Array
Dua-Dimensi dengan Baris-Baris Berbeda Panjang
Baris-baris sebuah array dua-dimensi
dapat memiliki panjang yang bervariasi. Deklarasi
var b = [ [ 1, 2 ], [ 3, 4, 5 ] ];
menciptakan array b dengan baris 0 memuat dua elemen (1 dan 2) dan baris 1 memuat
tiga elemen (3, 4, dan 5).
Menciptakan
Array Dua-Dimensi dengan new
Sebuah array multidimensi dengan tiap
baris memiliki jumlah kolom yang berbeda dapat dialokasikan secara dinamis,
sebagai berikut:
var b;
b = new Array( 2 ); // mengalokasikan
baris-baris
b[ 0 ] = new Array(
5
);
// mengalokasikan kolom-kolom untuk baris 0
b[
1 ] = new Array( 3
); // mengalokasikan kolom-kolom untuk baris 1
Kode tersebut menciptakan sebuah array
dua-dimensi dengan dua baris. Baris 0 memiliki lima kolom, dan baris 1 memiliki
tiga kolom.
Contoh
Array Dua-Dimensi: Menampilkan Nilai Elemen
Gambar 7.11 menginisialisasi array
dua-dimensi dalam deklarasi dan menggunakan loop for...in bersarang untuk menjelajah array (memanipulasi setiap
elemen array).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
<?xml
version = "1.0" encoding = "utf-8"?>
<!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
Gambar 7.11: InisialisasiArray3.html -->
<!--
Menginisialisasi array multidimensi. -->
<html xmlns =
"http://www.w3.org/1999/xhtml">
<head>
<title>Menginisialisasi
array multidimensi</title>
<script type =
"text/javascript">
<!--
var array1 = [ [ 1, 2, 3
], // baris pertama
[ 4, 5, 6 ] ]; // baris kedua
var array2 = [ [ 1, 2 ],
// baris pertama
[ 3 ], // baris kedua
[ 4, 5, 6 ] ]; // baris
ketiga
tampilArray( "Nilai-nilai
di dalam array1 secara baris",
array1 );
tampilArray( "Nilai-nilai
di dalam array2 secara baris",
array2 );
function tampilArray(
kepala, sArray )
{
document.writeln( "<h2>"
+ kepala + "</h2><pre>" );
// beriterasi melalui array-array
satu-dimensi
for ( var i in
sArray )
{
// beriterasi melalui
elemen-elemen tiap
// array satu-dimensi
for ( var j
in sArray[ i ] )
document.write(
sArray[ i ][ j ] + " " );
document.writeln(
"<br />" );
} // akhir for
document.writeln( "</pre>"
);
} // akhir fungsi tampilArray
// -->
</script>
</head><body></body>
</html>
|
Gambar 7.11 Menginisialisasi array multidimensi. Array
Program mendeklarasikan dua array di
dalam skrip utama (pada elemen head
XHTML). Deklarasi array1 (baris
12-13 menyediakan enam penginisialisasi pada dua subdaftar. Subdaftar pertama
menginisialisasi baris pertama dari array dengan nilai 1, 2, dan 3; subdaftar
kedua menginisialisasi baris kedua dari array dengan nilai 4, 5, dan 6.
Deklarasi array2 (baris 14-16)
menyediakan enam penginisialisasi di dalam tiga subdaftar. Subdaftar untuk
baris pertama secara eksplisit menginisialisasi baris pertama agar memiliki dua
elemen dengan nilai 1 dan 2. Subdaftar untuk baris kedua menginisialisasi baris
kedua agar memiliki satu elemen dengan nilai 3. Subdaftar untuk baris ketiga
menginisialisasi baris ketiga dengan nilai 4, 5, dan 6.
Skrip memanggil fungsi tampilArray dari baris 18-19 untuk
menampilkan tiap elemen array pada halaman web. Fungsi tampilArray (baris 21-37) menerima dua argumen, yaitu sebuah string
kepala untuk ditampilkan yang
terletak sebelum array dan array yang akan ditampilkan (sArray). Perhatikan kegunaan dari sebuah statemen for...in bersarang untuk menambilkan
baris-baris dari tiap array dua-dimensi. Statemen for...in sebelah luar beriterasi menjelajahi baris-baris dari
array. Statemen for...in sebelah
dalam beriterasi menjelajahi kolom-kolom dari baris yang sedang diproses.
Statemen for...in bersarang pada
contoh ini dapat dituliskan dengan statemen for, sebagai berikut:
for ( var i
= 0; i < sArray.length;
++i )
{
for ( var j = 0; j < sArray[ i ].length; ++j )
document.write( sArray[ i ][ j ] + " " );
document.writeln( "<br />" );
}
Pada statemen for sebelah luar, ekspresi sArray.length
menentukan jumlah baris di dalam array. Pada statemen for sebelah dalam, ekspresi sArray[i].length
menentukan jumlah kolom pada tiap baris array. Kondisi ini memampukan loop
dalam menentukan, untuk tiap baris, jumlah kolom.
Manipulasi
Array Multidimensi dengan Statemen for dan for...in
Banyak manipulasi array yang umum
dijumpai menggunakan statemen for
atau for...in. Sebagai contoh,
statemen for berikut menetapkan
semua elemen pada baris ketiga dari array a
pada Gambar 7.10 menjadi nol:
for ( var kol = 0; kol < a[ 2 ].length; ++kol
)
a[ 2 ][
kol ] = 0;
Anda menetapkan baris ketiga; oleh
karena itu, Anda mengetahui bahwa subskrip pertama selalu 2 (0 adalah baris
pertama dan 1 adalah baris kedua). Loop for
hanya memodifikasi subskrip kedua (subskrip kolom). Statemen for tersebut ekivalen dengan:
a[ 2 ][ 0
] = 0;
a[ 2 ][ 1
] = 0;
a[ 2 ][ 2
] = 0;
a[ 2 ][ 3 ] = 0;
Statemen for...in ini juga ekivalen dengan statemen for tersebut:
for ( var kol in a[ 2 ] )
a[ 2 ][
kol ] = 0;
Statemen for bersarang berikut
menentukan total dari semua elemen pada array a:
var total = 0;
for ( var baris = 0; baris < a.length; ++baris )
for ( var kol
= 0; kol < a[ baris ].length; ++kol )
total += a[
baris ][ kol ];
Statemen for mencari total dari semua elemen array, satu baris per waktu.
Statemen for sebelah luar dimulai
dengan menentapkan subskrip baris
menjadi 0, sehingga elemen-elemen dari baris pertama ditotal menggunakan
statemen for sebelah dalam. Statemen
for sebelah luar kemudian
menginkremen baris menjadi 1,
sehingga elemen-elemen dari baris kedua dapat ditotal. Kemudian statemen for sebelah luar menginkremen baris menjadi 2, sehingga elemen-elemen
dari baris ketiga ditotal. Hasilnya dapat ditampilkan ketika statemen for bersarang berhenti. Statemen for sebelumnya ekivalen dengan statemen
for...in berikut:
var total = 0;
for ( var baris
in a )
for ( var kol in a[ baris ] )
total += a[ baris ][ kol ];
7.10
Kuis Online
Kuis online merupakan salah satu
aplikasi web populer yang sering digunakan untuk kepentingan edukasional. Para pengembang
web secara umum membangun kuis menggunakan formulir XHTML sederhana dan
memproses hasilnya menggunakan JavaScript. Array memampukan seorang programer
untuk merepresentasikan beberapa pilihan jawaban (yang mungkin) pada sebuah
struktur data tunggal. Gambar 7.12 memuat sebuah kuis online yang terdiri-dari
satu pertanyaan. Halaman kuis memuat salah satu ikon dan sebuah formulir XHTML
dimana pengguna mengidentifikasi informasi yang disajikan citra dengan
menyeleksi salah satu dari empat tombol radio yang disediakan. Seteleh pengguna
menyeleksi salah satu pilihan tombol radio yang disediakan dan menyerahkan
formulir, skrip menentukan apakah pengguna menyeleksi jawaban yang benar atau
tidak.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
<?xml
version = "1.0" encoding = "utf-8"?>
<!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
Gambar 7.12: kuis.html -->
<!--
Kuis online dengan JavaScript. -->
<html xmlns =
"http://www.w3.org/1999/xhtml">
<head>
<title>Kuis Online</title>
<script type =
"text/JavaScript">
<!--
function periksaJawaban()
{
var kuisKu =
document.getElementById( "kuisKu" );
// menentukan apakah jawaban
benar
if ( kuisKu.elements[
1 ].checked )
alert( "Selamat,
jawaban Anda benar" );
else // jika jawaban
salah
alert( "Jawaban
Anda salah. Silahkan coba lagi" );
} // akhir fungsi periksaJawaban
-->
</script>
</head>
<body>
<form id = "kuisKu"
onsubmit = "periksaJawaban()" action = "">
<p>Pilihan nama dari ikon
dari gambar
yang ditampilkan
berikut:<br />
<img src="1.gif"
alt="mystery tip"/>
<br />
<input type = "radio"
name = "radiobutton" value = "1" />
<label>Rumah Adat
Padang</label>
<input type = "radio"
name = "radiobutton" value = "2" />
<label>Rumah Adat
Batak</label>
<input type = "radio"
name = "radiobutton" value = "3" />
<label>Rumah Adat Jawa</label>
<input type = "radio"
name = "radiobutton" value = "4" />
<label>Rumah Adat
Papua</label><br />
<input type = "submit"
name = "submit" value = "Submit" />
<input type = "reset"
name = "reset" value = "Reset" />
</p>
</form>
</body>
</html>
|
Gambar 7.12 Kuis online dengan JavaScript
Pertama-tama akan didiskusikan elemen body (baris 25-48) dari dokumen XHTML.
Komponen-komponen GUI dari body
berperan penting pada skrip.
Baris 26-47 mendefinisikan form yang menyajikan kuis kepada
pengguna. Baris 26 memulai elemen form
dan menetapkan atribut onsubmit
menjadi “periksaJawaban()”,
mengindikasikan bahwa penerjemah harus mengeksekusi fungsi JavaScript periksaJawaban (baris 12-21) ketika
pengguna menyerahkan formulir (yaitu, mengklik tombol Submit atau menekan Enter).
Baris 29 menambahkan citra pada halaman
web. Baris 32-42 menampilkan beberapa tombol radio dan beberapa label terkait yang menampilkan
pilihan-pilihan jawaban yang mungkin. Baris 44-45 menambahkan tombol submit dan tombol reset pada halaman.
No comments:
Post a Comment