Có hai phương thức mảng JavaScript thường được sử dụng để tìm một giá trị trong một mảng. includes() và indexOf(). Nếu bạn đang kiểm tra xem một mảng có chứa giá trị nguyên thủy hay không, chẳng hạn như chuỗi hoặc số, giải pháp sẽ đơn giản hơn so với việc bạn đang kiểm tra giá trị là một đối tượng
Kiểm tra xem một mảng có chứa giá trị nguyên thủy hay không
Giá trị nguyên thủy là một giá trị không phải là một đối tượng. Có bảy kiểu dữ liệu nguyên thủy. chuỗi, số, bigint, boolean, undefined, ký hiệu và console.log(["Jenny", "Matilda", "Greta"].indexOf("Matilda") !== -1); // true 0. Sử dụng phương thức includes() là phương thức dễ đọc nhất để kiểm tra xem một mảng có chứa giá trị nguyên thủy hay không
console.log(["Jenny", "Matilda", "Greta"].includes("Matilda")); // trueĐối số đầu tiên của phương thức includes() là console.log(["Jenny", "Matilda", "Greta"].indexOf("Matilda") !== -1); // true 3. Đây là giá trị mà phương thức tìm kiếm trong mảng. Phương thức trả về console.log(["Jenny", "Matilda", "Greta"].indexOf("Matilda") !== -1); // true 4 nếu tìm thấy console.log(["Jenny", "Matilda", "Greta"].indexOf("Matilda") !== -1); // true 3 và console.log(["Jenny", "Matilda", "Greta"].indexOf("Matilda") !== -1); // true 6 nếu không tìm thấy. Ngoài ra còn có một đối số thứ hai tùy chọn có tên là console.log(["Jenny", "Matilda", "Greta"].indexOf("Matilda") !== -1); // true 7, là chỉ mục để bắt đầu tìm kiếm trong mảng
Bạn cũng có thể sử dụng phương thức indexOf() để xác định xem một mảng có chứa giá trị nguyên thủy hay không
console.log(["Jenny", "Matilda", "Greta"].indexOf("Matilda") !== -1); // truePhương thức này trả về vị trí chỉ mục của giá trị trong mảng. Nếu giá trị không có trong mảng, nó trả về -1. Bạn có thể sử dụng điều này với toán tử bất đẳng thức nghiêm ngặt (_______0_______9) để trả về console.log(["Jenny", "Matilda", "Greta"].indexOf("Matilda") !== -1); // true 4 nếu giá trị nằm trong mảng hoặc console.log(["Jenny", "Matilda", "Greta"].indexOf("Matilda") !== -1); // true 6 nếu không
Bạn cũng có thể sử dụng phương thức const person = [{ name: "Bill" }, { age: 44 }]; const val = person[0]; console.log(person.includes(val)); // true 2 giống như phương thức indexOf() để kiểm tra xem một mảng có chứa giá trị nguyên thủy hay không
Kiểm tra xem một mảng có chứa đối tượng không
Nếu bạn đang kiểm tra xem một mảng có chứa một đối tượng trỏ đến cùng một vị trí trong bộ nhớ với một trong các mục của mảng hay không, thì việc kiểm tra sẽ giống như khi kiểm tra một giá trị nguyên thủy
const person = [{ name: "Bill" }, { age: 44 }]; const val = person[0]; console.log(person.includes(val)); // trueNếu giá trị không trỏ đến cùng một vị trí trong bộ nhớ, phương thức includes() sẽ trả về console.log(["Jenny", "Matilda", "Greta"].indexOf("Matilda") !== -1); // true 6. Trong mã bên dưới, một đối tượng mới được tạo cho biến const person = [{ name: "Bill" }, { age: 44 }]; const val = person[0]; console.log(person.includes(val)); // true 6, biến này có cùng thuộc tính với phần tử đầu tiên trong mảng const person = [{ name: "Bill" }, { age: 44 }]; const val = person[0]; console.log(person.includes(val)); // true 7
const person = [{ name: "Bill" }, { age: 44 }]; const val = { name: "Bill" }; console.log(person.includes(val)); // falseMặc dù hai đối tượng khác nhau có thể có cùng các thuộc tính với các giá trị bằng nhau, nhưng chúng không được coi là bằng nhau khi so sánh bằng cách sử dụng toán tử đẳng thức nghiêm ngặt (const person = [{ name: "Bill" }, { age: 44 }]; const val = person[0]; console.log(person.includes(val)); // true 8), mà phương thức includes() sử dụng. Điều này là do chúng đang được so sánh theo tham chiếu của chúng, đó là vị trí của chúng trong bộ nhớ. Điều này không giống như các giá trị nguyên thủy, được so sánh theo giá trị
Để kiểm tra xem hai đối tượng có cấu trúc bằng nhau hay không, cần có một hàm trợ giúp. Nó sẽ lặp qua các thuộc tính của từng đối tượng để kiểm tra xem chúng có cùng thuộc tính với cùng giá trị không
function shallowEqualityCheck(obj1, obj2) { const keys1 = Object.keys(obj1); const keys2 = Object.keys(obj2); if (keys1.length !== keys2.length) { return false; } for (const key of keys1) { if (obj1[key] !== obj2[key]) { return false; } } return true; }Hàm const person = [{ name: "Bill" }, { age: 44 }]; const val = { name: "Bill" }; console.log(person.includes(val)); // false 0 này trước tiên kiểm tra xem các đối tượng có cùng số lượng thuộc tính hay không và nếu có, hàm sẽ kiểm tra xem giá trị của từng thuộc tính trong đối tượng 1 có giống với giá trị của thuộc tính tương ứng trong đối tượng 2 không
Chức năng này thực hiện kiểm tra bình đẳng nông của hai đối tượng. Nó không kiểm tra các thuộc tính đối tượng lồng nhau. Nếu bạn cần so sánh các đối tượng với các thuộc tính lồng nhau, bạn sẽ cần thực hiện
Hàm kiểm tra đẳng thức nông này có thể được sử dụng với phương thức mảng const person = [{ name: "Bill" }, { age: 44 }]; const val = { name: "Bill" }; console.log(person.includes(val)); // false 1 để kiểm tra xem một mảng có chứa một đối tượng cụ thể hay không
const person = [{ name: "Bill" }, { age: 44 }]; const val = { name: "Bill" }; console.log(person.some((item) => shallowEqualityCheck(item, val))); // truePhương thức const person = [{ name: "Bill" }, { age: 44 }]; const val = { name: "Bill" }; console.log(person.includes(val)); // false 1 kiểm tra xem ít nhất một phần tử trong mảng có vượt qua bài kiểm tra được thực hiện bởi phương thức truyền vào const person = [{ name: "Bill" }, { age: 44 }]; const val = { name: "Bill" }; console.log(person.includes(val)); // false 3 hay không. Hàm này được thực thi cho từng phần tử của mảng. Nếu hàm trả về console.log(["Jenny", "Matilda", "Greta"].indexOf("Matilda") !== -1); // true 4 cho bất kỳ mục nào trong mảng, thì phương thức const person = [{ name: "Bill" }, { age: 44 }]; const val = { name: "Bill" }; console.log(person.includes(val)); // false 1 sẽ trả về console.log(["Jenny", "Matilda", "Greta"].indexOf("Matilda") !== -1); // true 4
Trong đoạn mã trên, phương thức const person = [{ name: "Bill" }, { age: 44 }]; const val = { name: "Bill" }; console.log(person.includes(val)); // false 1 sử dụng hàm const person = [{ name: "Bill" }, { age: 44 }]; const val = { name: "Bill" }; console.log(person.includes(val)); // false 0 để kiểm tra xem có bất kỳ phần tử nào trong mảng const person = [{ name: "Bill" }, { age: 44 }]; const val = person[0]; console.log(person.includes(val)); // true 7 khớp với giá trị của đối tượng const person = [{ name: "Bill" }, { age: 44 }]; const val = person[0]; console.log(person.includes(val)); // true 6 không