So sánh mảng số JavaScript

Hãy xem xét bạn có hai mảng trong Javascript, mỗi mảng chứa một số phần tử. Bây giờ, bạn muốn so sánh các mảng. Bằng cách so sánh, chúng tôi có nghĩa là bạn muốn biết liệu cả hai mảng có chứa cùng một số phần tử hay không và liệu tất cả các phần tử đó có cùng giá trị hay không. Nếu hai dãy thỏa mãn cả hai điều kiện này thì ta nói hai dãy bằng nhau. Nhưng, so sánh hai mảng không đơn giản như nó có vẻ. Hãy để chúng tôi khám phá những cách khác nhau mà chúng tôi có thể làm như vậy trong phần tiếp theo

Phương pháp so sánh hai mảng trong JavaScript

Có nhiều phương pháp để so sánh hai mảng trong Javascript, chúng ta sẽ xem xét một số phương pháp

Trong Javascript so sánh hai đối tượng hoặc mảng được thực hiện theo tham chiếu chứ không phải theo giá trị. Điều này có nghĩa là thay vì so sánh các giá trị có trong hai mảng, Javascript sẽ kiểm tra xem chúng có trỏ đến cùng một tham chiếu hay không, điều này thường không xảy ra ngay cả khi hai mảng chứa các phần tử giống nhau. Điều này có nghĩa là khi so sánh hai mảng trong JavaScript, sử dụng toán tử đẳng thức lỏng lẻo hoặc chặt chẽ ( == hoặc ===), thông thường nó sẽ cho kết quả sai. Hãy để chúng tôi cố gắng hiểu điều này tốt hơn bằng một ví dụ

const a = [1, 2, 3];
const b = [1, 2, 3];

if (a === b)
    console.log("The arrays have the same elements.")
else
    console.log("The arrays have different elements.")

đầu ra

The arrays have different elements.

Như bạn có thể thấy trong ví dụ trên mặc dù giá trị của cả hai mảng đều giống nhau nhưng kết quả so sánh là sai. Tuy nhiên, phương thức này có thể được sử dụng để kiểm tra xem hai tham chiếu của một đối tượng hoặc một mảng có đang hướng tới cùng một phần tử hay không. Hãy để chúng tôi cố gắng hiểu điều này tốt hơn bằng một ví dụ

const a = [1, 2, 3];
const b = [1, 2, 3];
const c = a;

if (a === c)
    console.log("The arrays have the same elements.")
else
    console.log("The arrays have different elements.")

đầu ra

The arrays have the same elements.
  • So sánh các mảng bằng JSON. xâu chuỗi ()

Một phương pháp khác thường được sử dụng để so sánh hai mảng trong javascript là sử dụng JSON. xâu chuỗi (). JSON. hàm stringify trong Javascript chuyển đổi một đối tượng/mảng thành chuỗi JSON. Vì vậy, sử dụng phương pháp này, sau đó chúng ta có thể tuần tự hóa từng mảng và so sánh hai chuỗi được tuần tự hóa. Hãy để chúng tôi cố gắng hiểu việc triển khai giải pháp này sẽ như thế nào

// A function to serialize the arrays into strings and compare them
const equalsCheck = (a, b) => {
    return JSON.stringify(a) === JSON.stringify(b);
}

// Declaring arrays
const a = [1, 2, 3];
const b = [1, 2, 3];

// Comparing both the arrays
if (equalsCheck(a, b))
    console.log("The arrays have the same elements.");
else
    console.log("The arrays have different elements.");

đầu ra

The arrays have the same elements.

Tuy nhiên, có một số trường hợp cạnh mà giải pháp này không thành công, để minh họa cho thực tế này, hãy xem xét ví dụ sau

// A function to serialize  the arrays into strings and compare them
const equalsCheck = (a, b) => {
    return JSON.stringify(a) === JSON.stringify(b);
}

// Declaring arrays
const a = [null, 2, 3];
const b = [undefined, 2, 3];

// Comparing both the arrays
if (equalsCheck(a, b))
    console.log("The arrays have the same elements.");
else
    console.log("The arrays have different elements.");

đầu ra

The arrays have the same elements.

Trong ví dụ này, các mảng được hiển thị bằng nhau mặc dù chúng không. Các mảng khác nhau về giá trị của các phần tử đầu tiên tương ứng của chúng. Nhưng cách mà JSON. Phương thức stringify() hoạt động, nó không xem xét các giá trị không xác định hoặc null khi chuyển đổi mảng thành chuỗi JSON. Do đó, nó chỉ bỏ qua chúng, đó là lý do tại sao các chuỗi trở nên bằng nhau. Những trường hợp như vậy có vẻ rất hiếm gặp, tuy nhiên, chúng có thể gây ra một số khó khăn trong việc khắc phục sự cố

  • So sánh các mảng bằng vòng lặp For

Một trong những cách đơn giản nhất có thể được sử dụng để so sánh hai mảng trong Javascript là so sánh từng phần tử trong cả hai mảng một. Để thực hiện giải pháp này, trước tiên chúng ta cần kiểm tra xem kích thước của cả hai mảng đang được so sánh có bằng nhau hay không

  1. Nếu kích thước của các mảng không bằng nhau thì chúng không bao giờ có thể bằng nhau
  2. Nếu kích thước của cả hai mảng trên thực tế bằng nhau, chúng tôi tiến hành kiểm tra từng phần tử của cả hai mảng

Hãy để chúng tôi hiểu điều này tốt hơn bằng một ví dụ

________số 8

đầu ra

The arrays have different elements.

Ghi chú. Chương trình trên không hoạt động nếu một số phần tử của mảng là đối tượng, ví dụ mảng như thế này

  • Sử dụng mảng. nguyên mẫu. mỗi()

Như chúng ta đã thấy trước đó, phương pháp so sánh hai mảng trong Javascript bằng JSON. stringify() chúng tôi phải xử lý một số trường hợp khó giải mã. Chúng ta có thể sử dụng Mảng. nguyên mẫu. every() trên tất cả các phần tử một để khắc phục những trường hợp này. Chúng ta hãy xem một ví dụ để hiểu phương pháp này

The arrays have different elements.
0

đầu ra

The arrays have the same elements.

Phương pháp này tránh được vấn đề tuần tự hóa đã đề cập ở trên. Tuy nhiên, nó không tính đến các mảng hoặc đối tượng lồng nhau. Hãy để chúng tôi cố gắng hiểu điều này tốt hơn với một ví dụ

The arrays have different elements.
2

đầu ra

The arrays have different elements.

Như bạn có thể thấy, trong ví dụ này, mặc dù tất cả các phần tử, thậm chí cả các đối tượng đều có cùng giá trị trong cả hai mảng, chúng ta vẫn nhận được một câu trả lời sai. Do đó, để sử dụng phương thức này với các mảng chứa các đối tượng hoặc mảng lồng nhau, chúng ta phải thực hiện một giải pháp đệ quy. Hãy cùng khám phá phương pháp này trong phần tiếp theo

  • Sử dụng mảng. nguyên mẫu. every() Với đệ quy

Cách thức hoạt động của phương pháp này rất giống với phương pháp trước đó. Sự khác biệt duy nhất là bất cứ khi nào chúng ta gặp một đối tượng lồng nhau trong các mảng, chúng ta sẽ lại gọi hàm này theo cách đệ quy cho các đối tượng đó và sau đó tiếp tục. Chúng ta hãy xem xét một ví dụ

The arrays have different elements.
4

đầu ra

The arrays have different elements.
5
  • Sử dụng tập hợp và mảng. Nguyên mẫu. Filter() kết hợp với vòng lặp

Trong trường hợp chúng ta chỉ cần kiểm tra xem nội dung của cả hai mảng có giống nhau không và không quan tâm đến thứ tự các phần tử thì chúng ta có thể sử dụng phương pháp này. Chúng tôi sử dụng một tập hợp và Array. nguyên mẫu. filter() cùng với một vòng lặp để kiểm tra từng giá trị duy nhất nếu chúng xuất hiện với số lần bằng nhau trong cả hai mảng

The arrays have different elements.
6

đầu ra

The arrays have the same elements.

Do đó, bạn có thể thấy mặc dù các mảng có các phần tử theo một thứ tự khác, nhưng chúng ta vẫn có câu trả lời đúng bằng cách sử dụng phương pháp này

Làm cách nào để so sánh hai mảng JavaScript?

Mặc dù JavaScript không có phương thức sẵn có để so sánh trực tiếp hai mảng, nhưng nó lại có phương thức sẵn có để so sánh hai chuỗi. Các chuỗi cũng có thể được so sánh bằng toán tử đẳng thức. Do đó, chúng ta có thể chuyển đổi mảng thành chuỗi, sử dụng phương thức Array join(), sau đó kiểm tra xem các chuỗi có bằng nhau không .

Làm cách nào để kiểm tra hai giá trị mảng bằng nhau trong JavaScript?

Kiểm tra xem hai mảng có bằng nhau hay không bằng Sắp xếp .
Sắp xếp cả hai mảng
Sau đó so sánh tuyến tính các phần tử của cả hai mảng
Nếu tất cả đều bằng nhau thì trả về true, ngược lại trả về false