So sánh 2 mảng giống nhau năm 2024

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

true false false false

0 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:

function array_equal(array, array2){

  
let flag = true;  
  
if (array1.length !== array2.length)  return flag = false;  
  
  
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à

true false false false

1 hay

true false false false

2 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() a.toString() == b.toString()

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é.