Giới thiệu
Một đối tượng trong JavaScript là một tập hợp không có thứ tự giá trị cốt lõi cặp (key: value
). Mỗi chính được biết đến như một tài sảnvà là một chuỗi đại diện cho tên thuộc tính. Nếu khóa không phải là chuỗi thì biểu diễn chuỗi đó sẽ được sử dụng. Một tài sản giá trị có thể thuộc bất kỳ loại dữ liệu nào phù hợp với thuộc tính về mặt khái niệm – một chuỗi, một số, một mảng hoặc thậm chí là một hàm.
Mặt khác, mảng là một tập hợp các giá trị được sắp xếp. Mỗi giá trị được gọi là một phần tử, được xác định bằng một chỉ số số. Một mảng có thể bao gồm các giá trị thuộc hầu hết mọi loại. Ví dụ: nó có thể lưu trữ các mục như số nguyên, chuỗi, boolean, hàm, v.v. Mảng JavaScript cũng không bị giới hạn ở một loại duy nhất, nghĩa là một mảng nhất định có thể chứa nhiều loại khác nhau bên trong nó.
Khi làm việc với JavaScript, tại một thời điểm cụ thể, bạn có thể cần xác định xem khóa có tồn tại trong một đối tượng hoặc mảng nhất định hay không.
Trong bài viết này, chúng ta sẽ thấy các phương pháp khác nhau mà chúng ta có thể sử dụng để kiểm tra xem một khóa cụ thể có tồn tại trong một đối tượng/mảng JavaScript hay không.
Sử dụng in
Nhà điều hành
Sản phẩm in
toán tử trong JavaScript được sử dụng để xác định xem một thuộc tính nhất định có tồn tại trong một đối tượng hay các thuộc tính kế thừa của nó (còn được gọi là chuỗi nguyên mẫu của nó). Nếu thuộc tính được cung cấp tồn tại, in
toán tử trả về true.
Kiểm tra một đối tượng
let user = { name: 'John Doe', age: 17, profession: 'Farmer'
}; // Check if key exists 'name' in user; // Returns true
'profession' in user; // Returns true
'Daniel' in user; // Returns false becuase no key like that exists
'Farmer' in user; // Returns false because 'Farmer' is not a key, but a value
Kiểm tra một mảng
Vì chúng tôi đã chứng minh rằng JavaScript in
toán tử có thể được sử dụng với các đối tượng, bạn có thể hỏi liệu nó có thể được sử dụng với mảng hay không. Trong JavaScript, mọi thứ đều là một thể hiện của kiểu Đối tượng (ngoại trừ kiểu nguyên thủy), vì vậy mảng cũng hỗ trợ kiểu in
nhà điều hành.
Hãy xác nhận xem đó có phải là một phiên bản của Object
gõ bằng cách sử dụng instanceof
nhà điều hành:
let numbers = [22, 3, 74, 35]; numbers instanceof Object // Returns true
Bây giờ, hãy quay lại việc sử dụng in
nhà điều hành:
let number = [12, 33, 14, 45, 6]; 33 in number; // Returns true
12 in number; // Returns true 8 in number; // Returns false because the 8 index does exist on the array
6 in number; // Returns false because the 6 index does not exist on the array rather it exists as a value
Điều này cũng sẽ trở lại true
cho các thuộc tính phương thức trên một kiểu mảng, trong đó mảng số là một thể hiện.
'map' in number; // Returns true because 'map' is a method attribute of the array type
Sử dụng hasOwnProperty()
Phương pháp
Trong JavaScript, hasOwnProperty()
Hàm được sử dụng để xác định xem đối tượng có thuộc tính được cung cấp làm thuộc tính riêng của nó hay không. Điều này rất quan trọng để xác định xem thuộc tính có được đối tượng kế thừa chứ không phải thuộc tính của chính nó hay không.
Kiểm tra một đối tượng
let user = { name: 'John Doe', age: 17, profession: 'Farmer'
}; // Check if key exists
let hasKey = user.hasOwnProperty('name'); if (hasKey) { console.log('This key exists.');
} else { console.log('This key does not exist.');
}
Kiểm tra một mảng
Bạn có thể bắt đầu tự hỏi liệu điều này có hiệu quả với mảng hay không. Như chúng tôi đã thiết lập trước đó, một mảng thực sự là một nguyên mẫu (ví dụ) của Object
type, do đó nó cũng có sẵn phương thức này.
let number = [12, 33, 14, 45]; // Check if key exists
number.hasOwnProperty(1); // Returns true
number.hasOwnProperty(0); // Returns true
number.hasOwnProperty(7); // Returns false because 7 is not an existing index on the array
Sử dụng Object.key()
Phương pháp
Phương pháp tĩnh Object.key
tạo và trả về một mảng có các thành phần là chuỗi tên (khóa) thuộc tính của đối tượng. Điều này có thể được sử dụng để lặp qua các khóa của đối tượng, sau đó chúng ta có thể sử dụng khóa này để xác minh xem có khóa nào khớp với khóa nhất định trong đối tượng hay không.
Sử dụng some()
Phương pháp
some()
là một phương thức JavaScript kiểm tra hàm gọi lại trên tất cả các phần tử của mảng gọi và trả về true
nếu hàm gọi lại trả về true
cho bất kì của họ.
Sử dụng some()
cho các đối tượng
let user = { name: 'John Doe', age: 17, profession: 'Farmer'
}; // Check if key exists
Object.keys(user).some(key => key === 'name'); // Returns true
Object.keys(user).some(key => key === 'role'); // Returns false
Chúng ta cũng có thể tùy chỉnh hàm này thành một hàm có thể tái sử dụng:
const checkKey = (obj, keyName) => { let keyExist = Object.keys(obj).some(key => key === keyName); console.log(keyExist);
}; checkKey(user, 'name'); // Return true
Sử dụng some()
cho một mảng
let number = [12, 33, 14, 45]; // Check if key exists
number.some(value => value === 1); // Returns true
number.some(value => value === 7); // Returns false
Một lần nữa, giống như với đối tượng, chúng ta cũng có thể sử dụng hàm tái sử dụng được tùy chỉnh tương tự để kiểm tra sự tồn tại của một giá trị trong một mảng:
const checkVal = (arr, val) => { let valExist = arr.some(value => value === val); console.log(valExist);
}; checkVal(number, 7); // Returns false
checkVal(number, 0); // Returns true
Sử dụng indexOf()
Phương pháp
JavaScript indexOf()
phương thức sẽ trả về chỉ mục của trường hợp đầu tiên của một phần tử trong mảng. Nếu phần tử không tồn tại thì trả về -1.
Sử dụng indexOf()
cho một đối tượng
Sản phẩm Object
gõ vào JavaScript không thực sự hỗ trợ indexOf
phương thức, vì các thuộc tính/khóa của nó vốn không có vị trí được lập chỉ mục trong đối tượng. Thay vào đó, chúng ta có thể lấy các khóa của đối tượng dưới dạng một mảng và sau đó kiểm tra sự tồn tại của khóa bằng cách sử dụng hàm indexOf
phương pháp:
let user = { name: 'John Doe', age: 17, profession: 'Farmer'
}; // Check if key exists
Object.keys(user).indexOf('name') // Returns 0
Object.keys(user).indexOf('role') // Returns -1
Hãy nhớ rằng các đối tượng JavaScript không phải lúc nào cũng giữ nguyên trật tự quan trọng, do đó chỉ mục được trả về có thể không có ý nghĩa như trong mảng. Trong trường hợp này, chỉ mục chủ yếu được sử dụng để xác định sự tồn tại của khóa.
Đây là một ví dụ về việc sử dụng điều này trong một hàm tiện ích:
const checkKey = (obj, keyName) => { if (Object.keys(obj).indexOf(keyName) !== -1) { console.log('This key exists'); } else { console.log('This key does not exist'); }
}; checkKey(user, 'name'); // Logs 'This key exists'
checkKey(user, 'role'); // Logs 'This key does not exists'
Sử dụng indexOf()
cho một mảng
Như chúng ta đã thấy trong ví dụ trước, mảng hỗ trợ indexOf
phương thức, không giống như các đối tượng. Để sử dụng nó, hãy chuyển giá trị của mục bạn đang tìm kiếm cho indexOf
, sau đó sẽ trả về vị trí của giá trị đó nếu nó tồn tại trong mảng:
let number = [12, 33, 14, 45]; // Find position of the item in the array
number.indexOf(14); // Returns 2
number.indexOf(7); // Returns -1
Kết luận
Trong bài viết này, chúng ta đã thấy tất cả các cách khả thi để kiểm tra xem khóa hoặc mục có tồn tại trong đối tượng/mảng JavaScript hay không. Chúng tôi chỉ ra cách sử dụng in
nhà điều hành, hasOwnProperty()
phương pháp, và some
phương pháp. Chúng ta cũng đã thấy các đối tượng và mảng JS tương tự như thế nào trong đó các mảng kế thừa từ các đối tượng và do đó chứa nhiều phương thức giống nhau.