+19

Phỏng vấn Javascript - Viết hàm kiểm tra số chẳn lẻ không dùng if else

Series các bài viết ngắn chia sẻ Tips Javascript giúp code nhanh và kiến thức phỏng vấn Javascript.

Meta Crew

Câu hỏi

Viết một hàm khi ta truyền một số nếu là chẳn thì trả về even, nếu là số lẻ thì trả về odd, hàm không cần dùng if else? Để viết hàm này, ta sử dụng Bitwise OperatorConditional (Ternary) Operator.

Bitwise Operator

Là toán tử cho phép ta thực thi phép toán thao tác dạng bit. Trong JS khi ta thực hiện toán tử Bitwise lên hai số thì nó chuyển hai số về dạng nhị phân và thực thi phép toán thao tác bit. Ví dụ 3 | 1 => 0011 | 0001 => 0011 => 3. Toán tử Bitwise bao gồm: AND (&), OR (|), XOR (^), NOR (~) . Vậy tại sao ta lại đề cập Bitwise Operator ở đây? Vì ta có thể sử dụng Bitwise AND (&) cho việc kiểm tra số chẳn lẻ:

  • Số chẳn thực thi Bitwise AND (&) với 1 trả về 0
  • Số lẻ thực thi Bitwise AND (&) với 1 trả về 1

Ví dụ:

0 & 1 => 0000 & 0001 => 0
1 & 1 => 0001 & 0001 => 1
2 & 1 => 0010 & 0001 => 0
3 & 1 => 0011 & 0001 => 1
4 & 1 => 0100 & 0001 => 0
5 & 1 => 0101 & 0001 => 1

Tiếp theo kiểm tra nếu 1 thì trả về odd, nếu 0 thì trả về even

Conditional (Ternary) Operator

Ta sử dụng Ternary Operator vì đề không cho dùng if else. Ternary Operator là cách viết rút gọn của if, nó chứa 3 phần tử trong một cú pháp: condition ? exprIfTrue : exprIfFalse. Nếu condition đúng thì giá trị exprIfTrue được trả về, còn sai thì là exprIfFalse. Ví dụ:

const age = 26;
const beverage = age >= 21 ? "Beer" : "Juice";
console.log(beverage); // "Beer"

Đáp án

Hàm kiểm tra chẳn lẻ:

function isEvenOrOdd(number) {
  return number & 1 ? 'odd' : 'even' 
}

isEvenOrOdd(0) // even
isEvenOrOdd(1) // odd
isEvenOrOdd(2) // even
isEvenOrOdd(3) // odd

Đáp án khác

Nếu bạn gặp trường hợp nhà phỏng vấn nói về Ternary Operator bản chất cũng là if else thì bạn có thể sửa thành cách sau đây. Hàm kiểm tra chẳn lẻ:

function isEvenOrOdd(number) {
  return ["even", "odd"][numer % 2]
}

isEvenOrOdd(0) // even
isEvenOrOdd(1) // odd
isEvenOrOdd(2) // even
isEvenOrOdd(3) // odd

Frontend VN

Theo dõi FB hoặc Tiktok của Frontend VN để cập nhật kiến thức và tips về FE mỗi ngày 🥰.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí