Khi web và ứng dụng ngày càng phức tạp, JavaScript và Node.js trở thành yêu cầu phổ biến trong kho công cụ lập trình viên. Để nâng cao trình độ code và giảm đau đầu, bạn có thể định nghĩa sớm một số hàm trong code nhanh chóng hoàn thành tác vụ đơn giản.
Lưu ý: Javascript khác Java. Xem khác biệt tại đây.
1. Xáo trộn giá trị trong mảng (Array)
Giống như xáo bài, bạn cũng xáo trộn giá trị trong mảng bao nhiêu lần tùy thích trong JavaScript với one-liner này:
const shuffleArray = (arr) => arr.sort(() => 0.5 - Math.random());
Giữ ví dụ bộ bài, nếu muốn xáo 52 giá trị:
let myarray = Array.from({length:52}, (v,k) => k+1); console.log(shuffleArray(myarray));
Kết quả console sẽ hiển thị giá trị ngẫu nhiên xáo trộn.
2. Kiểm tra ngày rơi vào Cuối tuần hay Ngày trong tuần
Dùng toán tử dư (remainder) đơn giản, dễ dàng kiểm tra ngày rơi vào cuối tuần trong JavaScript:
const isWeekend = (date) => date.getDay() % 6 == 0;
Muốn đổi kiểm tra ngày trong tuần, đảo so sánh cuối:
const isWeekday = (date) => date.getDay() % 6 !== 0;
Code dưới kiểm tra hôm nay có phải cuối tuần:
console.log(isWeekend(new Date()));
Thay vì định nghĩa riêng biến isWeekday hoặc isWeekend, có thể dùng toán tử NOT (!) trong câu if-then-else cho một trong hai biến:
if (!isWeekend(new Date())) { console.log("Hôm nay rơi vào ngày trong tuần."); } else { console.log("Hôm nay rơi vào cuối tuần."); }
3. Cắt số đến vị trí thập phân cụ thể
Đầu ra cho người dùng cần đơn giản nhất, và không gì làm trang web/app xấu xí hơn chuỗi số khổng lồ rối rắm. Để cắt bỏ phần thập phân kém ý nghĩa và hiển thị như vậy cho người dùng, lấy định nghĩa tiện lợi này:
const decimalFormat = (n, places) => ~~(Math.pow(10, places) * n) / Math.pow(10, places);
Để test, định nghĩa giá trị số với lượng chữ số thập phân khổng lồ và gọi hàm nhanh cắt 2 chữ số thập phân.
let deciwow = 299.39542014592; console.log(decimalFormat(deciwow, 2));
Kết quả ít "sore eyes" (gây mỏi mắt) hơn.
4. Chuyển đổi nhiệt độ
Trong JavaScript không có cách chuẩn chuyển đổi giữa Celsius và Fahrenheit, nhưng với hai one-liner đơn giản, tự tạo chuẩn riêng.
Celsius sang Fahrenheit:
const cToF = (celsius) => celsius * 9/5 + 32;
Fahrenheit sang Celsius:
const fToC = (fahrenheit) => (fahrenheit - 32) * 5/9;
Thành phố tôi -2 độ Celsius. Dùng one-liner Celsius sang Fahrenheit xem nghĩa gì đối với người sống ở US:
cToF(-2);
Biểu thức cho 28,4 độ Fahrenheit.
5. Kiểm tra người dùng có bật Dark Mode không
Nếu muốn nội dung hiển thị tôn trọng cấu hình màu của người dùng code, JavaScript có cách phát hiện dark mode để điều chỉnh màu tương ứng. Phương pháp hơi rườm rà viết, nhưng rút gọn bằng one-liner:
const isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
Ví dụ kiểm tra dùng biến này:
if (isDarkMode) { console.log("Màn hình này ở chế độ tối."); } else { console.log("Màn hình này không dùng chế độ tối."); }
Lưu ý: code chỉ chạy trong JavaScript cho trình duyệt. Node.js không hỗ trợ window.
6. Lấy trung bình mảng số
Khi xử lý tập dữ liệu, JavaScript có hàm tiện gắn với mảng cho phép thực hiện phép tính cần thiết lấy tổng tất cả giá trị một bảng cụ thể rồi chia cho độ dài bảng. Để làm thanh lịch một dòng, chỉ cần:
const getAverage = (arr) => arr.reduce((a, b) => a + b, 0) / arr.length;
Tạo tập dữ liệu và in trung bình qua console:
let dataset = [2, 14, 88, 204, 1515, 1294, 12, 144]; console.log(getAverage(dataset));
Dùng code này, đầu ra là 409.125.
7. Tạo UUID
Muốn thu thập thống kê và dữ liệu từ người dùng ứng dụng (ví dụ: tạo cookie), một trong những cách tốt nhất làm điều đó mà không xâm lấn là tạo universally unique identifier (UUID). JavaScript không có cách dễ tạo UUID tuân thủ RFC4122 (dù Node.js có package uuid npm cung cấp chức năng này sẵn).
Trong JS, tạo UUID mới cho người dùng với biểu thức một dòng:
const genUUID = (a) => (a ? (a ^ ((Math.random() * 16) >> (a / 4))).toString(16) : ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, genUUID));
Test đầu ra:
console.log(genUUID());
8. Lấy số ngày giữa hai ngày
Khi xác định tuổi giá trị cụ thể (như tài khoản người dùng), phải tính số ngày trôi qua từ mốc nhất định. One-liner đơn giản làm điều đó:
const ageDays = (old, recent) => Math.ceil(Math.abs(old - recent) / (1000 * 60 * 60 * 24));
Ví dụ sử dụng: giả sử đánh giá tuổi người dùng tạo tài khoản 28/12/2012, dùng khai báo lấy số ngày giữa ngày đó và hôm nay:
console.log(ageDays(new Date('2012-12-28'), new Date()));
Lúc viết, cho kết quả 3298 ngày.
9. Tạo số ngẫu nhiên trong phạm vi
Đôi khi không đủ chỉ tạo số ngẫu nhiên. Có thể cần giới hạn điều kiện tạo. Với one-liner này, tạo số trong phạm vi chỉ định:
const rangeRandom = (low, high) => Math.floor(Math.random() * (high - low + 1)) + low;
Test dễ dàng:
console.log(rangeRandom(400, 20000));
Câu hỏi thường gặp
1. Tại sao dùng UUID trong cookie?
Vì cookie bản chất xâm lấn và chiếm dung lượng máy người dùng, nên nhằm hiệu quả và ít xâm lấn nhất khi dùng công cụ này thu thập dữ liệu. UUID mang lại lợi ích kép. Thứ nhất: giảm thiểu dung lượng lưu trữ phía client do định danh chỉ 128 bit. Thứ hai: không phụ thuộc dữ liệu cá nhân người dùng.
2. Lỗi "window is not defined" trong Node.js khi phát hiện dark mode. Làm sao?
Node.js không gọi được module client-side vì không có quan hệ client-server nội tại như JavaScript. One-liner phát hiện dark mode bài này dành riêng JavaScript chạy trình duyệt.
3. Code này phổ quát mọi trình duyệt không?
Code JavaScript dùng trình thông dịch (interpreter) hoạt động phổ quát. Mặc dù lý thuyết chạy mọi trình duyệt, cách thông dịch code có thể khác một chút, đặc biệt phần mềm rất cũ. Với tất cả one-liner ở đây, chúng nên trả về cùng kết quả bất kể trình duyệt người dùng chạy. Tuy nhiên lưu ý: một số tính năng JavaScript chung có thể không chạy trên Pale Moon, Internet Explorer, hoặc phiên bản đầu 2000 của trình duyệt đang phát triển tích cực.