Hướng dẫn how do you compare two elements in an array javascript? - làm thế nào để bạn so sánh hai phần tử trong một mảng javascript?

Đối với các danh sách lớn hơn, một cách hiệu quả hơn so với .indexOf là đưa danh sách người dùng tốt của bạn vào một đối tượng và sử dụng tra cứu trực tiếp trên đối tượng đó. Điều này cũng hoạt động trong các trình duyệt cũ hơn vì nó không yêu cầu phương thức

if (goodUsers[user])
0.

var goodUsers = {
    "someuser1": true, 
    "someuser2": true, 
    "someuser3": true
};

Sau đó, bạn có thể kiểm tra xem người dùng có nằm trong danh sách đó với không:

if (goodUsers[user])

Đối với các danh sách dài hơn, điều này hiệu quả hơn rất nhiều so với việc sử dụng indexof, chỉ lặp đi lặp lại thông qua mảng so sánh từng mục trong mảng với mục tiêu của bạn vì điều này sử dụng tra cứu băm (như bảng băm).

Nếu bạn có một bộ người dùng ứng viên và bạn muốn biết những người nào trong danh sách

if (goodUsers[user])
1, bạn có thể làm điều đó như thế này:

var goodUsers = {
    "someuser1": true, 
    "someuser2": true, 
    "someuser3": true
};

var candidateUsers = ["someuser4", "someuser1", "someuser5", "someuser2", "someuser6", "someuser3", "someuser7"];

function checkUsers(candidates) {
    var goods = [];
    for (var i = 0, len = candidates.length; i < len; i++) {
        var item = candidates[i];
        if (goodUsers[item]) {
            goods.push(item);
        }
    }
    return(goods);
}

var validUsers = checkUsers(candidateUsers);

Edit:

Mặc dù tìm kiếm đối tượng này vẫn hoạt động trong JavaScript hiện đại, nhưng hiện tại có một đối tượng

if (goodUsers[user])
2 và
if (goodUsers[user])
3 trong ES6 có thể làm sạch hơn và hiệu quả hơn. Đối với tra cứu người dùng, có lẽ bạn sẽ sử dụng đối tượng
if (goodUsers[user])
2.

const goodUsers = new Set(["someUser1", "someUser2", "someUser3"]);
goodUsers.add("someUser4");

if (goodUsers.has(user)) {
    // user is in the set
}

Bắt đầu nội dung chính

Hướng dẫn how do you compare two elements in an array javascript? - làm thế nào để bạn so sánh hai phần tử trong một mảng javascript?

So sánh bình đẳng

So sánh hai mảng trong JavaScript bằng cách sử dụng các toán tử bình đẳng lỏng lẻo hoặc nghiêm ngặt (

if (goodUsers[user])
5 hoặc
if (goodUsers[user])
6) thường sẽ dẫn đến
if (goodUsers[user])
7, ngay cả khi hai mảng chứa cùng một phần tử theo cùng một thứ tự. Điều này là do thực tế là các mảng và đối tượng được so sánh bằng tham chiếu chứ không phải bằng giá trị trong JavaScript, điều đó có nghĩa là giải pháp này không tạo ra kết quả mong muốn:

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

a === b; 

Json.Stringify

Một giải pháp phổ biến mà nhiều người đề xuất là sử dụng

if (goodUsers[user])
8. Điều này cho phép chúng tôi tuần tự hóa từng mảng và sau đó so sánh hai chuỗi tuần tự hóa. Một triển khai đơn giản của điều này có thể trông giống như thế này:

const equals = (a, b) => JSON.stringify(a) === JSON.stringify(b);

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

equals(a, b); 

Mặc dù điều này có vẻ như là một giải pháp tuyệt vời, ngắn và dễ hiểu, nhưng nó bị thiếu một số trường hợp cạnh trong đó chuỗi tuần tự hóa của các giá trị khác nhau là như nhau. Ví dụ:

const str = 'a';
const strObj = new String('a');
str === strObj; 
equals([str], [strObj]); 

null === undefined; 
equals([null], [undefined]); 

Mặc dù những trường hợp này có vẻ khá hiếm, nhưng chúng có thể gây ra một số vấn đề rất khó chịu khó theo dõi và khắc phục. Đây là lý do tại sao giải pháp này không được khuyến nghị cho hầu hết các trường hợp sử dụng.

Một cách tốt hơn

Một cách tiếp cận tốt hơn là so sánh hai mảng '

if (goodUsers[user])
9 và sử dụng
var goodUsers = {
    "someuser1": true, 
    "someuser2": true, 
    "someuser3": true
};

var candidateUsers = ["someuser4", "someuser1", "someuser5", "someuser2", "someuser6", "someuser3", "someuser7"];

function checkUsers(candidates) {
    var goods = [];
    for (var i = 0, len = candidates.length; i < len; i++) {
        var item = candidates[i];
        if (goodUsers[item]) {
            goods.push(item);
        }
    }
    return(goods);
}

var validUsers = checkUsers(candidateUsers);
0 để so sánh các giá trị của hai mảng:

const equals = (a, b) =>
  a.length === b.length &&
  a.every((v, i) => v === b[i]);

const a = [1, 2, 3];
const b = [1, 2, 3];
const str = 'a';
const strObj = new String('a');

equals(a, b); 
equals([str], [strObj]); 
equals([null], [undefined]); 

Cách tiếp cận này bảo vệ chống lại vấn đề tuần tự hóa được mô tả ở trên. Tuy nhiên, nó không tính đến các mảng hoặc đối tượng lồng nhau, cần được kiểm tra đệ quy. Đối với một giải pháp mạnh mẽ xử lý vấn đề này và các vấn đề khác, bạn nên sử dụng đoạn trích bằng nhau.

So sánh không có thứ tự

Cuối cùng, có những trường hợp thứ tự của các phần tử trong mỗi mảng không quan trọng và chúng tôi chỉ quan tâm đến cùng một giá trị tồn tại trong cả hai mảng. Đối với những trường hợp này, bạn có thể sử dụng

if (goodUsers[user])
2 và
var goodUsers = {
    "someuser1": true, 
    "someuser2": true, 
    "someuser3": true
};

var candidateUsers = ["someuser4", "someuser1", "someuser5", "someuser2", "someuser6", "someuser3", "someuser7"];

function checkUsers(candidates) {
    var goods = [];
    for (var i = 0, len = candidates.length; i < len; i++) {
        var item = candidates[i];
        if (goodUsers[item]) {
            goods.push(item);
        }
    }
    return(goods);
}

var validUsers = checkUsers(candidateUsers);
2 kết hợp với một vòng lặp để lặp qua các giá trị duy nhất và kiểm tra xem mỗi cái có cùng số lần trong mỗi mảng không:

const equalsIgnoreOrder = (a, b) => {
  if (a.length !== b.length) return false;
  const uniqueValues = new Set([...a, ...b]);
  for (const v of uniqueValues) {
    const aCount = a.filter(e => e === v).length;
    const bCount = b.filter(e => e === v).length;
    if (aCount !== bCount) return false;
  }
  return true;
}

Để giải thích chi tiết hơn, bạn nên kiểm tra đoạn trích Havesamecontents.

Đoạn trích và bộ sưu tập được đề xuất

  • So sánh các giá trị trong JavaScript là một trong những nhiệm vụ phổ biến nhất, nhưng nó có rất nhiều điều bạn nên ghi nhớ.

  • Trả về sự khác biệt đối xứng giữa hai mảng, sử dụng một hàm được cung cấp làm bộ so sánh.

  • Trả về mọi yếu tố tồn tại trong bất kỳ một trong hai mảng ít nhất một lần, sử dụng hàm so sánh được cung cấp.

  • Tìm hiểu làm thế nào bạn có thể so sánh hai đối tượng trong JavaScript bằng các kỹ thuật khác nhau khác nhau.

Làm thế nào để bạn so sánh hai yếu tố trong một mảng?

Sử dụng các phương thức mảng.equals (Array1, Array2) - Phương thức này lặp lại trên từng giá trị của một mảng và so sánh bằng phương thức bằng. Sử dụng mảng. Phương thức Deepequals (Array1, Array2) - Phương thức này lặp lại trên từng giá trị của một mảng và so sánh sâu bằng bất kỳ phương thức nào được ghi đè. equals(array1, array2) methods − This method iterates over each value of an array and compare using equals method. Using Arrays. deepEquals(array1, array2) methods − This method iterates over each value of an array and deep compare using any overridden equals method.

Làm cách nào để so sánh với mảng javascript?

Mặc dù JavaScript không có phương pháp sẵn có để so sánh trực tiếp hai mảng, nhưng nó có các phương pháp sẵn có để so sánh hai chuỗi. Chuỗi cũng có thể được so sánh bằng cách sử dụng toán tử bình đẳng. Do đó, chúng ta có thể chuyển đổi các mảng thành chuỗi, sử dụng phương thức mảng (), sau đó kiểm tra xem các chuỗi có bằng nhau không.convert the arrays to strings, using the Array join() method, and then check if the strings are equal.

Tại sao tôi không thể so sánh các mảng trong JavaScript?

Lý do tại sao chúng ta thường không thể so sánh các mảng là do cách kiểm tra so sánh bình đẳng hoạt động với các mảng (và cả các đối tượng).Thông thường với các loại dữ liệu nguyên thủy, bạn chỉ có thể so sánh các giá trị.Vì các mảng không phải là nguyên thủy, kiểm tra bình đẳng so sánh tham chiếu của mảng (những gì mảng đang chỉ ra).because of how the equality comparison check works with arrays(and also objects). Normally with primitive data types you can just compare the values. Since arrays are not primitives, the equality check compares the reference of the array(what the array is pointing to).

Làm thế nào để bạn so sánh các số trong hai mảng?

phương thức bằng ().Lớp mảng Java cung cấp phương thức Equals () để so sánh hai mảng.Nó lặp lại trên mỗi giá trị của một mảng và so sánh các phần tử bằng phương thức bằng ().. Java Arrays class provides the equals() method to compare two arrays. It iterates over each value of an array and compares the elements using the equals() method.