Professional Documents
Culture Documents
Ni dung
Array v struct trong JavaScript
Ch
Khi copy cc m JavaScript chy phi thay th cc du nhy kp cho ng nu khng s khng
chy c.
Mc lc
1.Mng trong JavaScript........................................................................................................................3
C bao nhiu cch vit mng trong JavaScript?................................................................................3
Cch 1: S dng lp 'Array'..........................................................................................................3
Cch 2: S dng cp ngoc vung '[]'...........................................................................................3
Cch 3: S dng cp ngoc bao '{}'..............................................................................................4
S khc nhau gia cc cch vit mng..............................................................................................4
S dng mng vit lp..................................................................................................................5
2.Lp Array............................................................................................................................................6
Cch s dng.....................................................................................................................................6
Khi to mng nh to mt object trong C++, C# hay Java........................................................6
Ly kch thc (tng s phn t) ca mng.................................................................................6
Ni cc phn t trong mng thnh 1 chui dng hm join ca Array..........................................6
Cc chc nng ca Array...................................................................................................................6
Ging nh 1 mng thng thng..................................................................................................6
Stack..............................................................................................................................................7
Queue............................................................................................................................................8
Hashtable......................................................................................................................................9
3.To lp Map c bit.........................................................................................................................11
Cch dng........................................................................................................................................11
Khi to.......................................................................................................................................11
Gn gi tr....................................................................................................................................11
Ly 1 phn t..............................................................................................................................12
Tm kim 1 phn t.....................................................................................................................13
X kt qu tr v.........................................................................................................................13
Xa 1 phn t..............................................................................................................................14
Benchmark.......................................................................................................................................14
M ngun (file SMap.js 1.43KB/ 61 lines)..................................................................................15
// Khai bo mng
var arr = new Array(xin cho, 100, bn l ai th?, 0.911);
// kim tra cc gi tr c trong arr th dng on m sau:
for (var x in arr) alert(arr[x]);
// x l index, arr[x] l value
// Hoc tng ng vi on m trn:
for (var i=0; i<arr.length; i++) alert(arr[i]);
// C 2 lnh 'for' trn u cho cng 1 kt qu.
Thc ra y l mt kiu vit khc ca lp Array. Khi khai bo mng bng cp ngoc vung '[]'
th cng s dng c cc phng thc c trong lp Array (xem phn 2. Lp Array).
// Khai bo mng
var arr = [];
// Khai bo mng
var arr = {item1: xin cho, item2: 100, item3: bn l ai th?,
item4: 0.911};
// s dng lnh 'for' duyt mng hash th ch c 1 cch thi:
for (var x in arr) alert(arr[x]);
// x l key, arr[x] l value
// Khai bo chung
var arr1 = {key1: value1, key2: value2, ...};
// Hoc tch cc cp (key, value) ra tng dng ring r:
var arr2 = {
key1: value1,
key2: value2,
...
}
// Khi duyt mng hash th dng 'for (var x in...
for (var x in arr) {
// X l x y
}
// Ly tng phn t ca mng hash qua key ca n nh sau:
var value = arr[key];
Tuy nhin mng hash khng s dng c cc phng thc ca lp Array. B li, cch vit ny
rt l th khi to lp.
Array
[]
{}
Phn loi
Mng+Hash
Mng+Hash
Hash
Khng
Khng
Khng
H tr vit lp
Khng
Khng
// gi tr ty
// gi tr ty
Nu dng mng hash th c th tch ring phn hm to ca lp vi phn khai bo cc thuc tnh
v cc phng thc cn li nh sau:
// Khai bo lp c dng mng hash
function Class() {} // Ch l hm to thi, ko cha g c
/* Khai bo thuc tnh v phng thc ca lp bng mng hash */
Class.prototype = {
thuoc_tinh1: 'thuc tnh1',
// gi tr ty
thuoc_tinh2: 1000,
// gi tr ty
phuong_thuc1: function() {
// x l y
alert(this.thuoc_tinh2);
alert(this.thuoc_tinh1);
},
phuong_thuc2: function(param1, param2...) {
// x l y
},
}
Lu l v dng mng nn phi c du phy ',' ngn cch cc thuc tnh v phng thc ca
lp. Khi dng mng hash th ko cn dng n khai bo 'this' nhng khi tham chiu th phi dng
'this'.
Hon ton c th kt hp 2 cch khai bo lp trn khi vit lp.
2. Lp Array
Lp Array trong JavaScript rt mnh. N lm c mi th:
Mng
Stack
Queue
Hashtable
Cch s dng
hoc
// To mng c kch thc 100
var arr = new Array(100);
Nu bit trc kch thc mng th khai bo theo cch th 2 s chy nhanh hn.
Ko phi xa b nh cho mng v JavaScript c b dn dp ring (ging Java hoc C#).
// C th gn mi gi tr cho Array
// v trong JavaScript khng phn bit kiu d liu
arr[i] = value;
V d:
<html>
<title>Array</title>
<head>
<script language=JavaScript>
// Khai bo mng ko xc nh kch c
gi tr cho mng
= 100;
= Array;
= 57.98;
= true;
Stack
Array cung cp 2 phng thc l push v pop thc hin nhim v ca Stack.
// Khai bo stack
var stack = new Array();
// Thm 1 phn t vo stack
// value l d liu bt k cn a vo stack
stack.push(value);
// Ly 1 phn t t stack
var element = stack.pop();
V d:
<html>
<head>
<title>Stack</title>
<script language=JavaScript>
// To stack
var stack = new Array();
// Thm phn t vo stack
stack.push(Value 1);
stack.push(Value 2);
stack.push(Value 3);
// S dng log hin th stack
var log = stack = [+stack.join( -> )+]\n;
// Ly d liu t stack
// Ko t stack.length trong vng for v sau
// mi vng lp kch thc stack s thay i
var max = stack.length;
for (var i=0; i<max; i++)
Queue
V d:
<html>
<head>
<title>Queue</title>
<script language=JavaScript>
// To queue
var queue = new Array();
// Thm phn t vo queue
queue.push(Value 1);
queue.push(Value 2);
queue.push(Value 3);
// S dng log hin th queue
var log = queue = [+queue.join( -> )+]\n;
// Ly d liu trong queue
// Ko t queue.length trong vng for v sau
// mi vng lp kch thc queue s thay i
var max = queue.length;
for (var i=0; i<max; i++)
log += shift: +queue.shift()+\n;
// Queue sau khi ht d liu
Hashtable
// error v c 2 mc
// ok
// ok
Khi to bng hash th ko dng c phng thc join v thuc tnh length.
c tt c cc (key, value) trong bng hash ko dng vng lp for nh sau:
for (var value in hashtable){
// x l value y
}
V d:
<html>
<head>
<title>Hash Table</title>
<script language=JavaScript>
// To bng hash
var hashtable = new Array();
// Thm gi tr vo bng hash
hashtable[key1] = value1;
hashtable[key2] = 2;
// Hin th tng value theo key
alert(hashtable[key1]);
alert(hashtable[key2]);
alert(hashtable[key3]); // kq: undefined
// Hin th tt c cc gi tr trong bng hash
var log = ;
for (var value in hashtable)
10
3. To lp Map c bit
Lp SMap (Special Map) thc hin ging nh lp Properties trong Java nh th ny:
Cch dng
Khi to
Gn gi tr
C 2 cch
Gn gi tr qua phng thc push(key, value) ca SMap
map.push(key, value);
Cch ny n gin hn l dng du chm '.' nhng ch thc hin c khi cuongvm l
1 nt trung gian.
Ly 1 phn t
C 2 cch
Ly qua hm get(key) ca SMap
var result = map.get(key);
V d
// Ni tip cc v d bn trn
var name = map.get(cuongvm.tn);
// name = V Mnh Cng
var nhan_vien = map.get(cuongvm);
// Array
// nhan_vien = cuongvm{V Mnh Cng, 25, abc-soft}
V d
12
Trong trng hp ko chc chn kt qu tr v l Array hay value th cn kim tra n. Chi
tit ni trong phn: X l kt qu tr v.
Tm kim 1 phn t
X kt qu tr v
null
Kim tra kt qu tr v
Sau khi ly 1 phn t trong SMap m ko r n thuc lai no th lm nh sau:
var result = map.get(level1.level2...levelN);
// Tng ng:
// var result = map.array[level1][level2]...[levelN];
if (result == null){
// Khng tm thy key ny trong SMap
} else if (result instanceof Array){
// X l mng result
// Ton t instanceof ging instanceof trong Java
} else{
// X l gi tr: mi th khng phi l Array
}
// Gi s tn ti bn ghi sau:
// cuongvm{V Mnh Cng, 25, abc-soft}
var record = map.array[cuongvm]; // hoc map.get(cuongvm);
var kq = ;
// kt qu
13
Xa 1 phn t
// Ni tip cc v d bn trn
map.array[cuongvm][tn] = null;
var name = map.array[cuongvm][tn];
// name = null
// Tng ng: var name = map.get(cuongvm.tn);
map.array[cuongvm] = null;
var nhan_vien = map.array[cuongvm];
// nhan_vien = null
// Tng ng: var nhan_vien = map.get(cuongvm);
Benchmark
Test performance cho SMap.
Test 2 chc nng
Test-case 1: Ghi vo SMap 1000 bn ghi, sau tm bn ghi cui cng (bn ghi 999)
Test-case 2: Ghi vo SMap 10,000 bn ghi, sau tm bn ghi gia (bn ghi 5000)
14
IE 6
Kt lun
15
}
return this._el;
16