Как разработчик, увлеченный технологиями для здоровья, я заметил пробел на рынке. Хотя Subway предоставляет информацию о питательной ценности, клиентам не хватает интерактивного инструмента для настройки точных комбинаций блюд. Я хотел создать что-то, что давало бы людям информацию о выборе еды в реальном времени, вплоть до последней калории.
Задача была ясна: создать комплексный калькулятор, который мог бы обрабатывать огромную вариативность меню Subway — от выбора хлеба и белков до каждого овоща и приправы, сохраняя при этом точность с официальными данными о питательной ценности.
Я нашел инструмент от nutritionix, который делает то же самое, что хорошо, но я хотел создать что-то более удобное для пользователя.
Моей первой задачей был сбор и структурирование данных о питательной ценности. Я потратил недели на сбор официальных таблиц питания Subway, стандартизацию измерений и создание комплексной базы данных JSON.
Структура должна была быть как комплексной, так и эффективной:
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 };
\ Каждый пункт меню содержит 19 показателей питательной ценности, что позволяет отображать полную этикетку питания в стиле FDA, а не только калории.
Основная сложность заключалась в управлении состоянием выбора пользователя. Заказ в Subway — это не простой выбор, а многомерная комбинация:
let currentSelection = { sandwichSize: '6inch', bread: null, proteins: {}, cheeses: {}, vegetables: {}, condiments: {}, // ... with quantities for each };
\ Я реализовал систему на основе количества, где пользователи могли добавлять несколько порций белков, сыров или овощей. Множитель "footlong" должен был автоматически удваивать соответствующие компоненты, сохраняя при этом другие (например, салаты) без изменений.
Чтобы калькулятор работал на любом веб-сайте без конфликтов CSS, я использовал ограниченный подход:
#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; }
\ Сброс all: initial и высокий z-index (99999) обеспечивали стабильное отображение калькулятора независимо от стиля сайта-хоста.
Инструмент использует официальную информацию о питании Subway 2025 года, включая недавние дополнения, такие как хлеб Ghost Pepper и обновленные формулы салатов. Каждая точка данных была проверена по PDF-руководствам по питанию Subway и данным веб-сайта.
База данных включает не только калории, но и:
Механизм расчета должен был обрабатывать сложные сценарии:
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 }; }
Я воспроизвел точный формат этикетки питания FDA, рассчитывая процент дневных значений на основе диеты в 2000 калорий (настраиваемой пользователем):
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 };
Расчеты % Daily Value используют эти официальные справочные суммы FDA, обеспечивая соответствие нормативным требованиям.
Выпадающие списки в стиле аккордеона со счетчиками в реальном времени решили проблему сложности:
Каждое действие пользователя вызывает несколько обновлений:
Индикатор прогресса использует цветовое кодирование (зеленый → желтый → красный), чтобы визуально указать, как блюдо соответствует ежедневным целям.
Калькулятор использует CSS Grid и Flexbox со стратегическими точками перелома:
@media (max-width: 768px) { .calculator-container { flex-direction: column; } .item-with-quantity { flex-direction: column; } .goal-setting-content { grid-template-columns: 1fr; } }
На мобильных устройствах элементы складываются вертикально, а этикетка питания остается читаемой без горизонтальной прокрутки.
Функция экспорта генерирует подробный текстовый отчет, включающий:
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 };
Каждое значение питания было перекрестно проверено с:
Модульная структура JSON позволяет легко обновлять, когда Subway:
Инструмент включает примечания (**) для элементов с потенциальными региональными вариациями, советуя пользователям проверять местную информацию о питании, когда она доступна.
Создание калькулятора питания Subway было больше, чем просто проект кодирования — это было о создании прозрачности в выборе пищи. Объединяя точные, официальные данные о питании с интуитивным интерфейсом, мы дали пользователям возможность принимать информированные решения о своих блюдах.
Инструмент демонстрирует, как веб-технологии (HTML, CSS, JavaScript) могут создавать мощные, интерактивные приложения, которые преодолевают разрыв между корпоративными данными и пониманием потребителей. Каждая строка кода служит конечной цели: помочь людям точно понять, что они едят, чтобы они могли согласовать свой выбор Subway со своими целями в области здоровья.
Калькулятор остается живым проектом, с планами расширить его возможности, сохраняя при этом основное обязательство по точности и удобству использования, которое уже сделало его ценным для тысяч пользователей.
Ссылка на калькулятор: Калькулятор калорий Subway: Подсчитывайте калории, наслаждайтесь сабом - Калькулятор калорий Subway
\ \


