1. Mảng hai chiều trong javascript là gì?

Mảng hai chiều là loại mảng mà mỗi phần tử của mảng đó là một mảng khác. Cấu trúc này giúp ta lưu trữ dữ liệu đa dạng và phong phú hơn nhiều so với mảng một chiều.

Hãy xem hình dưới đây để hiểu rõ hơn.



Mảng hai chiều có cấu trúc giống như một ma trận, mỗi phần tử sẽ có hai chỉ mục, đó là vị trí nằm trong hàng và cột [row|column].

Như trong hình trên thì vị trí của:

  • Số 5 sẽ là [0][0]
  • Số 12 sẽ là [0][1]
  • Số 13 sẽ là [1][0]
  • Số 14 sẽ là [1][1]

2. Khai báo mảng hai chiều trong javascript

Để khai báo mảng hai chiều trong js thì ta sẽ khai báo một mảng một chiều, sau đó mỗi phần tử của mảng ta sẽ gán giá trị là một mảng khác.

Bây giờ mình sẽ khai báo một mảng hai chiều có cấu trúc giống như hình ở phần 1 nhé.

1
2
3
4
5
6
var numbers = [
    [5, 12, 17, 9, 3],
    [13, 4, 8, 14, 1],
    [9, 6, 3, 7, 21]
];
alert(numbers[1][2]); // In ra 8

Bạn cũng có thể sử dụng Array để khai báo.

1
2
3
4
5
6
var numbers = new Array(
    new Array(5, 12, 17, 9, 3),
    new Array(13, 4, 8, 14, 1),
    new Array(9, 6, 3, 7, 21)
);
alert(numbers[1][2]); // In ra 8

3. Lấy phần tử mảng hai chiều trong javascript

Mỗi phần tử được chỉ định bởi hai thông số, thứ nhất là chỉ mục trên hàng và thứ hai là chỉ mục trên cột. Cú pháp như sau:

1
array[row][column]

Ví dụ: Truy cập đến phần tử hàng 2 cột 3 trong mảng numbers.

Vì chỉ mục bắt đầu bằng số 0 nên ta phải trừ đi 1 cho hàng và cột.

1
numbers[1][2]

Chiéu theo bảng dữ liệu trên thì ta sẽ lấy được giá trị là số 8.

4. Thêm phần tử vào mảng hai chiều trong javascript

Để thêm một phần tử vào mảng thì ta có hai trường hợp, thứ nhất là thêm vào cuối mảng và thứ hai là thêm vào đầu mảng.

Thêm vào cuối mảng hai chiều

Ta sử dụng hàm push() để thêm một phần tử vào cuối mảng hai chiều.

1
2
3
4
5
var numbers = [];
numbers.push([5, 12, 17, 9, 3]);
numbers.push([13, 4, 8, 14, 1]);
numbers.push([9, 6, 3, 7, 21]);
console.log(numbers);

Kết quả:

Thêm vào đầu mảng hai chiều

Ta sử dụng hàm unshift() để thêm phần tử vào đầu mảng.

1
2
3
4
5
var numbers = [];
numbers.unshift([5, 12, 17, 9, 3]);
numbers.unshift([13, 4, 8, 14, 1]);
numbers.unshift([9, 6, 3, 7, 21]);
console.log(numbers);

Kết quả:


Như bạn thấy, phần tử thêm đầu tiên sẽ bị dồn về cuối mảng, còn phần tử thêm cuối cùng sẽ nằm ở đầu mảng. Lý do là hàm unshift() sẽ đẩy các phần tử lên để nhường chỗ cho phần tử cần thêm.

5. Duyệt mảng hai chiều trong javascript

Để duyệt qua các phần tử trong mảng hai chiều thì chúng ta sử dụng hai vòng lặp lồng nhau. Vòng lặp đầu tiên sẽ lặp theo hàng và vòng lặp thứ hai sẽ lặp theo cột.

Lấy dữ liệu ở trên thì mình sẽ viết vòng lặp for duyệt qua các phần tử của mảng như sau:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var numbers = [
    [5, 12, 17, 9, 3],
    [13, 4, 8, 14, 1],
    [9, 6, 3, 7, 21]
];
 
// Lặp theo hàng
for (var i = 0; i < numbers.lenght; i++){
     
    // Lặp theo cột, số cộ từ 0 -> số lượng phần tử của hàng i
    for (var j = 0; j < numbers[i].length; j++){
        console.log(numbers[i][j]);
    }
}

Tương tự, nếu bạn muốn tạo một mảng random các số ngẫu nhiên gồm 5x4 = 20 phần tử thì làm như sau:

1
2
3
4
5
6
7
8
9
10
11
12
var numbers = [];
 
// Lặp theo hàng
for (var i = 0; i < 4; i++){
    numbers[i] = [];
    // Lặp theo cột, số cộ từ 0 -> số lượng phần tử của hàng i
    for (var j = 0; j < 5; j++){
        numbers[i][j] = Math.floor((Math.random() * 10) + 1);
    }
}
 
console.log(numbers);

Kết quả: