Đôi khi trong Javascript, chúng tôi có một đối tượng mà chúng tôi cần tuân theo một bộ khóa cụ thể. Điều này có thể thực hiện được thông qua việc thực thi kiểu trong TypeScript, nhưng nếu chúng tôi muốn thực hiện một số việc nhất định nếu các khóa không tồn tại, thì chúng tôi phải thực hiện một cách tiếp cận khác
Ví dụ: giả sử chúng tôi đang nhận đối tượng sau từ một mảng, trong đó firstName, lastName và age đều cần thiết cho một thao tác mà chúng tôi muốn hoàn thành. Ví dụ
let obj = { firstName: Jack, lastName: Doe, age: 123 } console.log(`${obj.firstName} ${obj.lastName} is ${obj.age}`);Nếu chúng tôi đang nhận dữ liệu của mình trong obj từ một mảng, chúng tôi có thể tin tưởng rằng các thuộc tính đó sẽ được cung cấp, nhưng nếu API thay đổi, chúng tôi có thể gặp sự cố. Các nhà phát triển API có thể quyết định xóa age hoặc bất kỳ thuộc tính nào khác hoặc có thể đổi tên firstName thành first_name. Trong trường hợp tốt nhất, điều này sẽ dẫn đến các khóa trở nên không xác định. Trong trường hợp xấu nhất, nó có thể dẫn đến lỗi và làm hỏng ứng dụng của chúng tôi
Để tránh điều này, chúng ta có thể kiểm tra xem đối tượng có các khóa mà chúng ta yêu cầu không
Cách kiểm tra xem đối tượng có chứa tất cả các khóa trong mảng không
Giải pháp cho vấn đề này sử dụng every(). every() là một phương thức mảng kiểm tra mọi phần tử trong một mảng và thực hiện kiểm tra logic trên chúng. Nếu tất cả trả về true, thì phương thức every() trả về true
Để kiểm tra xem một đối tượng có chứa tất cả các khóa trong một mảng hay không, chúng ta chỉ cần sử dụng every() trên một mảng gồm tất cả các khóa mà chúng ta muốn kiểm tra. Bằng cách đó, chúng tôi có thể kiểm tra một cách hợp lý từng phần tử tồn tại và sau đó làm điều gì đó khác nếu nó sai, giúp chúng tôi không gặp phải bất kỳ lỗi nào
let requiredKeys = [ 'firstName', 'lastName', 'age' ] let obj = { firstName: Jack, lastName: Doe, age: 123 } let checkAllKeys = requiredKeys.every((i) => obj.hasOwnProperty(i)); if(checkAllKeys) { console.log(`${obj.firstName} ${obj.lastName} is ${obj.age}`); } else { console.log('The API does not have all the keys required. Please check API and configuration') }Ở đây chúng tôi tạo một mảng các khóa cần thiết - firstName, lastName và age. Sau đó, chúng tôi sử dụng every() để đi qua từng mục trong mảng đó. Trong every(), chúng tôi chạy một hàm - ở đây,
let requiredKeys = [ 'firstName', 'lastName', 'age' ] let obj = { firstName: Jack, lastName: Doe, age: 123 } let checkAllKeys = requiredKeys.every((i) => obj.hasOwnProperty(i)); if(checkAllKeys) { console.log(`${obj.firstName} ${obj.lastName} is ${obj.age}`); } else { console.log('The API does not have all the keys required. Please check API and configuration') } 8 là mục hiện tại đang được lặp qua. Nếu obj có thuộc tính let requiredKeys = [ 'firstName', 'lastName', 'age' ] let obj = { firstName: Jack, lastName: Doe, age: 123 } let checkAllKeys = requiredKeys.every((i) => obj.hasOwnProperty(i)); if(checkAllKeys) { console.log(`${obj.firstName} ${obj.lastName} is ${obj.age}`); } else { console.log('The API does not have all the keys required. Please check API and configuration') } 8, thì every() sẽ trả về true cho mục cụ thể đóNếu mọi mục trả về giá trị true, thì firstName2 trả về giá trị true tổng thể. Nếu không nó sẽ trả về false. Như vậy, nếu firstName3 là đúng, chúng tôi có thể chắc chắn rằng nó có tất cả các khóa mà chúng tôi cần. Nếu không, chúng ta có thể làm điều gì đó khác - như bảng điều khiển ghi lại lỗi