Là một nhà phát triển đam mê về công nghệ sức khỏe, tôi nhận thấy một khoảng trống trên thị trường. Mặc dù Subway cung cấp thông tin dinh dưỡng, khách hàng lại thiếu một công cụ tương tác để tùy chỉnh các kết hợp bữa ăn chính xác của họ. Tôi muốn tạo ra thứ gì đó giúp mọi người có cái nhìn theo thời gian thực về lựa chọn bữa ăn của họ, chi tiết đến từng calo cuối cùng.
Thách thức rất rõ ràng: xây dựng một máy tính toán toàn diện có thể xử lý sự đa dạng khổng lồ của thực đơn Subway—từ lựa chọn bánh mì và protein đến mọi loại rau và gia vị, đồng thời duy trì độ chính xác với dữ liệu dinh dưỡng chính thức.
Tôi đã tìm thấy một công cụ của nutritionix làm điều tương tự, khá tốt, nhưng tôi muốn xây dựng thứ gì đó thân thiện với người dùng hơn.
Nhiệm vụ đầu tiên của tôi là thu thập và cấu trúc dữ liệu dinh dưỡng. Tôi đã dành nhiều tuần để thu thập biểu đồ dinh dưỡng chính thức của Subway, chuẩn hóa các phép đo và tạo ra cơ sở dữ liệu JSON toàn diện.
Cấu trúc cần phải vừa toàn diện vừa hiệu quả:
const subwayMenu = { breads: [ { id: 'artisan-italian', name: '6" Artisan Italian Bread', calories: 210, totalFat: 2, saturatedFat: 1, // ... 14 additional nutritional fields }, // ... 10 more bread options ], // ... 9 additional categories };
\ Mỗi mục trong thực đơn chứa 19 chỉ số dinh dưỡng, đảm bảo chúng ta có thể hiển thị nhãn dinh dưỡng đầy đủ theo kiểu FDA, không chỉ là calo.
Độ phức tạp cốt lõi nằm ở việc quản lý trạng thái lựa chọn của người dùng. Một đơn hàng Subway không phải là một lựa chọn đơn giản—mà là một kết hợp đa chiều:
let currentSelection = { sandwichSize: '6inch', bread: null, proteins: {}, cheeses: {}, vegetables: {}, condiments: {}, // ... with quantities for each };
\ Tôi đã triển khai hệ thống dựa trên số lượng, nơi người dùng có thể thêm nhiều phần protein, phô mai hoặc rau. Hệ số nhân "footlong" phải tự động nhân đôi các thành phần thích hợp trong khi giữ nguyên các thành phần khác (như salad).
Để đảm bảo máy tính hoạt động trên bất kỳ trang web nào mà không xung đột CSS, tôi đã sử dụng cách tiếp cận có phạm vi:
#subway-calculator-isolated { all: initial; display: block; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', ...; } #subway-calculator-isolated * { box-sizing: border-box; margin: 0; padding: 0; }
\ Việc đặt lại all: initial và z-index cao (99999) đảm bảo máy tính sẽ hiển thị nhất quán bất kể kiểu dáng của trang web chủ.
Công cụ sử dụng thông tin dinh dưỡng chính thức năm 2025 của Subway, bao gồm các bổ sung gần đây như Bánh mì Ớt Ghost và công thức salad cập nhật. Mỗi điểm dữ liệu được xác minh đối chiếu với hướng dẫn dinh dưỡng PDF của Subway và dữ liệu trang web.
Cơ sở dữ liệu bao gồm không chỉ calo mà còn:
Động cơ tính toán phải xử lý các tình huống phức tạp:
function calculateTotalNutrition() { let total = { calories: 0, totalFat: 0, /* ... */ }; const sizeMultiplier = currentSelection.sandwichSize === 'footlong' ? 2 : 1; // Bread calculation (size-dependent) if (currentSelection.bread) { addItemNutrition(total, bread, currentSelection.bread.quantity * sizeMultiplier); } // Proteins, cheeses, vegetables (size-dependent) ['proteins', 'cheeses', 'vegetables'].forEach(category => { // Apply size multiplier }); // Soups, desserts (size-independent) ['soups', 'desserts'].forEach(category => { // No size multiplier }); return { nutrition: total, ingredients }; }
Tôi đã sao chép chính xác định dạng nhãn dinh dưỡng FDA, tính toán phần trăm Giá trị Hàng ngày dựa trên chế độ ăn 2,000 calo (người dùng có thể điều chỉnh):
const fdaDailyValues = { totalFat: 78, saturatedFat: 20, cholesterol: 300, sodium: 2300, totalCarbs: 275, dietaryFiber: 28, addedSugars: 50, protein: 50, vitaminA: 900, vitaminC: 90, calcium: 1300, iron: 18 };
Các tính toán % Daily Value sử dụng các số tham chiếu chính thức của FDA này, đảm bảo tuân thủ quy định.
Các dropdown kiểu accordion với bộ đếm thời gian thực đã giải quyết vấn đề phức tạp:
Mỗi hành động của người dùng kích hoạt nhiều cập nhật:
Thanh tiến trình sử dụng mã màu (xanh lá → vàng → đỏ) để chỉ ra trực quan cách bữa ăn phù hợp với mục tiêu hàng ngày.
Máy tính sử dụng CSS Grid và Flexbox với các điểm ngắt chiến lược:
@media (max-width: 768px) { .calculator-container { flex-direction: column; } .item-with-quantity { flex-direction: column; } .goal-setting-content { grid-template-columns: 1fr; } }
Trên thiết bị di động, các mục xếp chồng theo chiều dọc, và nhãn dinh dưỡng vẫn dễ đọc mà không cần cuộn ngang.
Tính năng xuất tạo ra báo cáo văn bản chi tiết bao gồm:
window.subwaySaveNutritionInfo = function() { const summary = ` ============================================================ SUBWAY NUTRITION CALCULATOR - MEAL SUMMARY ============================================================ MEAL DETAILS: ------------- Size: ${sizeText} Total Calories: ${Math.round(nutrition.calories)} Daily Calorie Goal: ${userSettings.dailyCalorieGoal} calories Percentage of Daily Goal: ${Math.round((nutrition.calories / userSettings.dailyCalorieGoal) * 100)}% `; // ... generates downloadable file };
Mỗi giá trị dinh dưỡng được đối chiếu với:
Cấu trúc JSON mô-đun cho phép cập nhật dễ dàng khi Subway:
Công cụ bao gồm ghi chú (**) cho các mục có khả năng biến thể theo khu vực, khuyên người dùng kiểm tra thông tin dinh dưỡng địa phương khi có sẵn.
Xây dựng Máy tính Dinh dưỡng Subway không chỉ là một dự án lập trình—mà còn là về việc tạo ra sự minh bạch trong lựa chọn thực phẩm. Bằng cách kết hợp dữ liệu dinh dưỡng chính thức, chính xác với giao diện trực quan, chúng tôi đã trao quyền cho người dùng đưa ra quyết định sáng suốt về bữa ăn của họ.
Công cụ này chứng minh cách các công nghệ web (HTML, CSS, JavaScript) có thể tạo ra các ứng dụng tương tác mạnh mẽ, thu hẹp khoảng cách giữa dữ liệu doanh nghiệp và sự hiểu biết của người tiêu dùng. Mỗi dòng mã đều phục vụ mục tiêu cuối cùng: giúp mọi người hiểu chính xác những gì họ đang ăn, để họ có thể điều chỉnh lựa chọn Subway của mình với mục tiêu sức khỏe của họ.
Máy tính vẫn là một dự án sống, với kế hoạch mở rộng khả năng của nó trong khi vẫn duy trì cam kết cốt lõi về độ chính xác và khả năng sử dụng đã làm cho nó có giá trị đối với hàng nghìn người dùng.
Liên kết máy tính: Subway Calorie Calculator: Count the Calories Enjoy the Sub - Subway Calorie Calculator
\ \


