So sánh mảng trong JavaScript | Laptrinhcanban.com

So sánh mảng trong JavaScript

Hướng dẫn cách so sánh mảng trong JavaScript. Bạn sẽ học được 3 cách so sánh 2 mảng trong JavaScript sau bài học này.

Có 3 phương pháp so sánh mảng trong JavaScript như sau:

  • Vòng lặp for: So sánh 2 mảng bằng cách đối chiếu từng cặp phần tử
  • JSON.stringify: So sánh 2 mảng bằng cách chuyển về kiểu JSON
  • Array toString: So sánh 2 mảng bằng cách chuyển về kiểu String

Có thể so sánh mảng trong JavaScript bằng toán tử so sánh không?

Khác với khi so sánh 2 số, bạn không thể sử dụng các toán tử so sánh như == hay === với mảng trong JavaScript được. Nếu chúng ta sử dụng các toán tử so sánh để so sánh mảng, thì kết quả trả về sẽ không được như mong đợi như sau:

let array1 = [0, 1, 2, 3, 4];
let array2 = [0, 1, 4];
let array3 = [0, 1, 2, 3, 4];
let array4 = [0, 1, 2, 3, 4, 5];

console.log( (array1 == array1) )
console.log( (array1 == array2) )
console.log( (array1 == array3) )
console.log( (array1 == array4) )

Kết quả:

true
false
false
false

Có thể thấy trong phép so sánh thứ 3 đã không đưa ra được kết quả chính xác.

Để so sánh mảng trong JavaScript, chúng ta không thể so sánh trực tiếp chúng như trên, mà cần phải so sánh từng cặp phần tử của chúng tại cùng vị trí index với nhau, hoặc là chuyển các mảng này sang dạng dữ liệu có thể so sánh, với một trong 3 phương pháp mà Kiyoshi sẽ trình bày ở dưới đây.

So sánh mảng trong JavaScript bằng cách đối chiếu từng cặp phần tử

Cách đầu tiên và đơn giản, dễ hiểu nhất để so sánh mảng trong JavaScript, đó chính là đối chiếu và kiểm tra từng cặp phần tử trong 2 mảng với nhau.

Nếu tất cả các cặp phần tử với vị trí tương ứng trong 2 mảng đều giống nhau thì hai mảng đó là bằng nhau. Ngược lại chỉ cần tồn tại một cặp phần tử có giá trị khác nhau, điều đó có nghĩa là 2 mảng đã cho không giống nhau.

Chúng ta sẽ sử dụng tới vòng lặp for với từng cặp phần tử và viết hàm trong chương trình so sánh mảng trong JavaScript như sau:

/*Hàm so sánh 2 mảng trong JavaScript*/
function array_equal(array, array2){
//flag = true => 2 mảng đã cho giống nhau
//flag = false => 2 mảng đã cho khác nhau

let flag = true;
/*Nếu số phần tử của 2 mảng khác nhau, thì chúng sẽ khác nhau*/
if (array1.length !== array2.length) return flag = false;

/*Kiểm tra từng cặp phần tử tương ứng xem có cặp nào khác nhau không*/
for (let i = 0; i < array1.length; ++i) {
if (array1[i] != array2[i]) return flag = false;
}

return flag;
}


let array1 = [0, 1, 2, 3, 4];
let array2 = [0, 1, 4];
let array3 = [0, 1, 2, 3, 4];
let array4 = [0, 1, 2, 3, 4, 5];

console.log( array_equal(array1, array1) )
console.log( array_equal(array1, array2) )
console.log( array_equal(array1, array3) )
console.log( array_equal(array1, array4) )

Kết quả phép so sánh mảng trong JavaScript:

true
false
true
false

So sánh 2 mảng bằng cách chuyển về kiểu JSON

Do trong Array Object không tồn tại phương thức nào giúp trực tiếp so sánh 2 mảng cả, nên thay vì so sánh trực tiếp 2 mảng với nhau thì chúng ta sẽ chuyển chúng về một kiểu dữ liệu khác dễ so sánh hơn.

Và lựa chọn tốt nhất trong số đó chính là kiểu JSON. Kiểu JSON giúp việc chuyển đổi giữa mảng sang JSON không bị lỗi trong mọi trường hợp, nên rất an toàn và giúp việc so sánh 2 mảng rất chính xác.

Sau khi chuyển mảng về JSON, bằng cách sử dụng phương thức JSON.stringify(), chúng ta có thể tiến hành so sánh gián tiếp 2 mảng thông qua 2 JSON của chúng như sau:

let array1 = [0, 1, 2, 3, 4];
let array2 = [0, 1, 4];
let array3 = [0, 1, 2, 3, 4];
let array4 = [0, 1, 2, 3, 4, 5];

console.log( JSON.stringify(array1) == JSON.stringify(array1) )
console.log(JSON.stringify(array1) == JSON.stringify(array2) )
console.log(JSON.stringify(array1) == JSON.stringify(array3) )
console.log(JSON.stringify(array1) == JSON.stringify(array4) )

Kết quả phép so sánh mảng trong JavaScript bằng JSON.stringify():

true
false
true
false

Lợi ích lớn nhất của việc so sánh mảng trong JavaScript bằng JSON.stringify chính là do việc chuyển đổi từ mảng sang JSON được JavaScript thực hiện rát nghiêm ngặt, nên kể cả với các trường hợp mà giá trị của mảng là null hay undefined chăng nữa thì lỗi cũng không bị xảy ra.

So sánh 2 mảng bằng cách chuyển về kiểu String

Phương pháp cơ bản cuối cùng để so sánh 2 mảng trong JavaScript chính là chuyển mảng về kiểu String rồi mới đem so sánh.

Để chuyển mảng về kiểu String, chúng ta sử dụng tới phương thức toString mà Kiyoshi đã hướng dấn trong bài Chuyển mảng thành chuỗi trong javascript. Và chúng ta tiến hành so sánh 2 mảng như sau:

let array1 = [0, 1, 2, 3, 4];
let array2 = [0, 1, 4];
let array3 = [0, 1, 2, 3, 4];
let array4 = [0, 1, 2, 3, 4, 5];

console.log( JSON.stringify(array1) == JSON.stringify(array1) )
console.log(JSON.stringify(array1) == JSON.stringify(array2) )
console.log(JSON.stringify(array1) == JSON.stringify(array3) )
console.log(JSON.stringify(array1) == JSON.stringify(array4) )

Kết quả phép so sánh mảng trong JavaScript bằng toString():

true
false
true
false

Tuy nhiên cần lưu ý là phương pháp này không an toàn bằng phương pháp sử dụng JSON.stringify(), bởi vì lỗi sẽ bị trả về nếu mảng đem so sánh có giá trị bằng null hoặc undefined như sau:

let a = [1, 2], b = null;
a.toString() == a.toString() // true
a.toString() == b.toString() // Uncaught TypeError: Cannot read property 'toString' of null at <anonymous>:1:19

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn cách so sánh mảng trong JavaScript rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về JavaScript trong các bài học tiếp theo.

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.