Làm cách nào chúng ta có thể so sánh hai mảng trong JavaScript?

Mảng là đối tượng trong JavaScript, do đó, toán tử ba bằng === chỉ trả về true nếu các mảng có cùng tham chiếu

Làm thế nào để bạn so sánh xem hai mảng có bằng nhau không? . thông số JavaScript xác định 4 cách khác nhau để kiểm tra xem hai giá trị có "bằng nhau" hay không và điều đó không tính đến sự bình đẳng sâu sắc giữa các đối tượng

Trong những trường hợp như thế này, bạn nên trình bày rõ ràng nhất có thể về ý nghĩa của cụm từ "bình đẳng". " Trong công nghệ phần mềm, đặt câu hỏi đúng cách thường làm cho câu trả lời trở nên rõ ràng

Với ý nghĩ đó, đây là 3 định nghĩa về đẳng thức cho mảng và cách kiểm tra chúng

Cùng chiều dài, mỗi giá trị bằng nhau

Một cách để so sánh ab là kiểm tra xem mỗi giá trị của a có hoàn toàn bằng với giá trị tương ứng của b hay không. Điều này hoạt động tốt nếu tất cả các phần tử của mảng là nguyên thủy trái ngược với các đối tượng

Bình đẳng sâu sắc với POJO

Hàm arrayEquals() trước đây hoạt động tốt đối với các giá trị nguyên thủy, nhưng không phù hợp nếu bạn muốn so sánh các đối tượng theo giá trị

Một cách hay để tính đến các giá trị đối tượng là so sánh các mảng theo đầu ra JSON.stringify() của chúng

Cách tiếp cận này rất tiện lợi vì nó yêu cầu mã tối thiểu và không có thư viện bên ngoài. Tuy nhiên, việc so sánh đầu ra của JSON.stringify() có một trường hợp cạnh không may có thể là một vấn đề tùy thuộc vào trường hợp sử dụng của bạn. Vì ===0 không phải là một giá trị JSON hợp lệ, nên các mảng bên dưới có cùng đầu ra JSON.stringify(), vì JSON.stringify() chuyển đổi ===0 thành ===4

const a = [undefined];
const b = [null];

Sử dụng ===5 của Lodash

Ngoài câu hỏi khó hiểu về ===4 so với ===0, việc so sánh đầu ra của JSON.stringify() cũng không tính đến các loại đối tượng. Đối với JSON.stringify(), một đối tượng có hàm true0 trả về 42 giống với số 42

Tương tự, một đối tượng tùy chỉnh giống như một POJO

mặt khác, tính đến tất cả những điều này

Hàm ===5 của Lodash là cách tốt nhất nếu bạn cần tất cả chuông và còi để kiểm tra xem các đối tượng có cùng lớp không. Cách tiếp cận JSON.stringify() hoạt động tốt đối với POJO, chỉ cần đảm bảo rằng bạn tính đến ===4 và chỉ sử dụng nó với dữ liệu đáng tin cậy - true0 có thể là một lỗ hổng bảo mật

Tuy nhiên, chúng ta không thể sử dụng toán tử đẳng thức để so sánh các mảng. Lý do đằng sau điều này là mảng JavaScript là một loại đối tượng và các đối tượng được so sánh dựa trên các tham chiếu của các biến chứ không phải trên các giá trị

const mảng1 = [1, 2, 3];
const array2 = [1, 2, 3];

console.log( mảng1 === array2); // false

console.log( mảng1 == array2); // false

Trong đoạn mã trên, chúng tôi đã khởi tạo hai mảng giống nhau. Tuy nhiên, trong đầu ra, chúng ta sẽ thấy sai

Làm cách nào chúng ta có thể so sánh hai mảng trong JavaScript?

Do đó để giải quyết vấn đề này, trong bài đăng này, chúng ta sẽ tìm hiểu một số cách để so sánh hai mảng trong JavaScript

Phương pháp 1. toString()

Phương thức toString() là một phương thức JavaScript sẵn có để chuyển đổi bất kỳ loại dữ liệu nào như số nguyên thành một chuỗi và sau đó trả về số nguyên đó dưới dạng một chuỗi. Chúng ta có thể áp dụng phương thức toString() trên một mảng, phương thức này sẽ chuyển đổi mảng thành một chuỗi và sau đó so sánh chuỗi này với chuỗi khác

const mảng1 = [1, 2, 3];
const array2 = [1, 2, 3];
const array3 = [4, 5, 6];
 
console.log( array1. toString() == . toString()); . // true
 
console.log( array1. toString() === array3.toString()); // false

Trong đoạn mã trên, chúng tôi đã khởi tạo ba mảng và sau đó chúng tôi áp dụng phương thức toString() trên các mảng và trước tiên so sánh mảng1 với mảng2 và trả về kết quả trong bảng điều khiển. Theo cách tương tự, chúng tôi đã so sánh mảng1 với mảng3 và bảng điều khiển ghi lại kết quả

Làm cách nào chúng ta có thể so sánh hai mảng trong JavaScript?

Từ kết quả trên, chúng ta có thể thấy rằng “mảng1” bằng “mảng2” nhưng “mảng1” không bằng “mảng3”

Phương pháp 2. Sử dụng vòng lặp

Hãy để chúng tôi thực hiện một phương pháp khác trong đó chúng tôi sẽ kiểm tra thủ công các phần tử của hai mảng và sau đó tạo đầu ra. Với mục đích này, hãy để tôi chỉ cho bạn mã đầu tiên

hàm compareArrays () {
    const array1 = [1, 2, 3];
    const array2 = [4, 5, 6];
    // First, check the length of both arrays
    // if length is not equal then arrays are different
    if(array1.độ dài. = mảng2. độ dài)
        trả về "Sai . ;
    else {
        // check every element of the two arrays
        for(var i=0;i<array1.độ dài; i ++ . =
            if(array1[i]!= mảng2 [ i ] .
                return "False";
            return "True";
        }
}
console.log( so sánh Mảng ()); // false

Trong đoạn mã trên, chúng ta đã định nghĩa một hàm trong đó chúng ta khởi tạo hai mảng trước. Sau đó, chúng tôi đặt điều kiện để kiểm tra độ dài của các mảng

Nếu độ dài của hai mảng không bằng nhau thì điều đó có nghĩa là hai mảng khác nhau do đó hàm sẽ trả về false

Tuy nhiên, nếu độ dài bằng nhau thì chúng tôi đã đặt một vòng lặp for nơi chúng tôi sẽ kiểm tra mọi phần tử của cả hai mảng. Nếu thậm chí một phần tử không bằng nhau thì Sai sẽ được trả về. Nếu tất cả các phần tử của cả hai mảng được so khớp thì nó sẽ trả về true

Đầu ra của đoạn mã trên được hiển thị bên dưới

Làm cách nào chúng ta có thể so sánh hai mảng trong JavaScript?

Nếu chúng ta thay đổi mã một chút bằng cách cung cấp hai mảng bằng e. g

hàm compareArrays () {
    const array1 = [1, 2, 3];
    const array2 = [1, 2, 3];
    // Check length of both arrays
    // if length not equal then arrays are different
    if(array1.độ dài. = mảng2. độ dài)
        trả về "Sai . ;
    else {
        // check every element of the two arrays
        for(var i=0;i<array1.độ dài; i ++ . =
            if(array1[i]!= mảng2 [ i ] .
                return "False";
            return "True";
        }
}
console.log( so sánh Mảng ()); // true

Đầu ra sau đây sẽ được tạo ra

Làm cách nào chúng ta có thể so sánh hai mảng trong JavaScript?

Phần kết luận

Chúng ta không thể so sánh hai mảng trong JavaScript bằng toán tử đẳng thức == hoặc === vì mảng JavaScript là đối tượng và do đó tham chiếu được kiểm tra chứ không phải giá trị. Với mục đích này, chúng tôi đã xác định hai phương thức trong bài đăng này để so sánh các mảng. Trong phương thức đầu tiên, chúng tôi đã sử dụng phương thức tích hợp toString() trong đó trước tiên chúng tôi đã chuyển đổi các mảng thành chuỗi và sau đó kiểm tra hai chuỗi được trả về bằng toán tử đẳng thức. Trong phương pháp thứ hai, trước tiên chúng tôi kiểm tra độ dài theo cách thủ công và sau đó so sánh lần lượt tất cả các phần tử của hai mảng bằng cách sử dụng vòng lặp for

Làm cách nào để so sánh 2 mảng trong js?

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 thế nào để so sánh 2 mảng?

Một cách đơn giản là chạy một vòng lặp và so sánh từng phần tử một . Java cung cấp một phương thức trực tiếp Arrays. equals() để so sánh hai mảng. Trên thực tế, có một danh sách các phương thức equals() trong lớp Arrays cho các kiểu nguyên thủy khác nhau (int, char,. v.v.) và một cho loại Đối tượng (là cơ sở của tất cả các lớp trong Java).

Làm cách nào để so sánh giá trị mảng trong JavaScript?

equals = function (array) { // nếu mảng kia là giá trị giả, trả về if (. mảng) trả về sai; . chiều dài. =

Mảng có thể được so sánh với == không?

Nói cách khác, hai mảng bằng nhau nếu chúng chứa các phần tử tương đương theo cùng thứ tự . Để kiểm tra đẳng thức tham chiếu, hãy sử dụng các toán tử đẳng thức tham chiếu, == và. =