Self-Paced Work
Follow these instructions to update the Food Picker website.
New Items
Feel free to add any new items desired! At minimum, add one new item for each existing restaurant:
| Restaurant | Item Name | Price | Picture | 
|---|---|---|---|
| McDonald's | McPlant | 10.99 | mcplant.jpg | 
| Chipotle | Chips | 5.00 | chips.png | 
| Taco Bell | Cheesy Roll Up | 1.00 | cheesyroll.jpg | 
| Panera | Bagel | 4.50 | bagel.jpg | 
Feel free to add these items directly when the items array is created, or add them in the way the Panera items were added. Whatever works!
Make sure it is possible to click the button and see all items appear.
New Restaurant: Arby's
Next, add an entirely new restaurant. This can be done in the same way that Panera was added, or added wholesale to the items array.
Store
Arby's
Items
| Item Name | Price | Picture | 
|---|---|---|
| Combo | 2.99 | combo.jpg | 
| Curly Fries | 4.09 | curlyfries.png | 
| Roast Beef | 2.00 | roastbeef.jpg | 
Price Display
There is a price property stored with every object in the items array, but it is currently not being used at all! Display a price along with each item name and picture.
HTML: Price Paragraph
Add a new <p></p> element to the page to store the price.
- Open the index.html file for editing
 - Find the 
<p id="food-name"></p> - Make a new line, and create a new 
<p></p>element - Set the 
idof the new<p>to befood-price 
Now the HTMl should be ready to go...
JavaScript: Setting the Food Price
Next, update the value of the <p id="food-price> element with the proper price.
- Open the script.js file for editing
 - Make a new line at the bottom of the 
getFoodfunction body - There, create a new variable named 
foodPriceElement - Set 
foodPriceElementto select the<p id="food-price">element- Using 
document.querySelector 
 - Using 
 - Under that, create a new variable named 
foodPriceText - Set 
foodPriceTextto bePrice: $PRICE - Make the string into a template literal
 - In the literal, replace 
PRICEwith${item.price}- This gets the 
priceproperty of theitemobject - Make sure to keep the original "$" in front of the price
 
 - This gets the 
 - Set the 
textContentproperty offoodPriceElementtofoodPriceText- This sets the actual element text so it will appear on the page
 
 
At this point, run the project, click the button, and verify that the proper prices appear!
Always New
Currently, when generating a random food item, it is possible to choose the same item. Fix this issue so that there is a brand new item every time someone clicks the "Get Food" button.
- Open the script.js file for editing
 - Find the 
foodNameTextvariable creation - Under that, create an 
ifstatement - For the conditional, check if 
foodNameTextis equal tofoodNameElement.textContent - In the body of the 
if, call thegetFoodfunction - Under that, still in the body, 
returnfrom the function 
Run the project, click the button a few times, and verify that there is always a new item!
CHALLENGE: Restaurant Filter
Currently, the button selects a random restaurant and then a random item. Instead of doing this, ask the user which restaurant they would like to visit, and then choose randomly from that restaurant's items.
HTML: Restaurant Name Input Element
Start by creating a new element in the HTML where the user can enter a restaurant name.
- Open the index.html file for editing
 - Find the opening 
<p></p>element with the welcome message - Make a new line under that, and create a new 
<p></p>element - Set the text to say "Enter a restaurant: "
 - After that, within the 
<p>and</p>, create an<input>element - Set the 
idof the<input>to be"restaurant" 
Run the project and verify that the text box appears on the page.
JavaScript: Getting the Restaurant Name
Next, select the new <input id="restaurant"> element, and get its value.
- Open the script.js file for editing
 - Make a new line at the top of the 
getFoodfunction - There, create a new variable named 
restaurantNameInput - Set 
restaurantNameInputto select the<input id="restaurant">element- Using 
document.querySelector 
 - Using 
 - Under that, create a new variable named 
restaurantName - Set 
restaurantNameto be thevalueof therestaurantNameInputvariable 
Now the name is ready to go.
JavaScript: Finding the Items for the Restaurant
Once the name has been retrieved, it will be possible to use it to find the proper object for the restaurant.
- Under the 
restaurantNamevariable, make a couple new lines in thegetFoodfunction - There, create a new variable named 
restaurantItemsset to an empty array[] - Next, create a 
forloop to loop through each element in theitemsarrayfor- Parentheses
 - Curly Brackets
 - Initialization (
let i = 0) - Condition (
i < items.length) - Increment (
i++) 
 - In the body of the 
forloop, create anifstatementif- Parentheses
 - Curly Brackets
 
 - For the condition, check if 
items[i].storeis equal torestaurantName- This means the current index has an item from the given restaurant
 
 - In the body of the 
if,pushtheitems[i]object to therestaurantItemsarray 
Now the restaurantItems variable should be ready to go! Replace the items references in the code below with restaurantItems to ensure that only items from the given restaurant are available.
Run the project, enter a restaurant name, and click the button. It should only choose food items from that restaurant! It's not perfect, though...
JavaScript: Dealing with Unfound Restaurants
Currently, when entering a restaurant name that is not found, the page should fail. Fix this by handling unfound restaurants.
- Under the 
forloop, create anifstatementif- Parentheses
 - Curly Brackets
 
 - Set the condition to check if 
restaurantItems.lengthis0 - In the body of the 
if, copy the old code that found a random restaurant 
Run the project, enter a name that does not exist, and verify that it chooses randomly from all restaurant items!
CHALLENGE: Vegetarian Filter
There may be some vegetarians who visit the site - these people would not like to see any items that contain meat. Update the code so they can select only vegetarian items!
HTML: Vegetarian Only Checkbox
Start by creating a new element in the HTML where the user can check whether they'd like only vegetarian items.
- Open the index.html file for editing
 - Find the 
<p></p>element with the restaurant name<input> - Make a new line under that, and create a new 
<p></p>element - Set the text to say "Vegetarian items only? "
 - After that, within the 
<p>and</p>, create an<input>element - Set the 
typeof the<input>to be"checkbox" - Set the 
idof the<input>to be"veg" 
Run the project and verify that the checkbox appears on the page.
JavaScript: Getting the Checkbox Value
Now the checkbox is there, but its value must be retrieved.
- Open the script.js file for editing
 - Find the 
restaurantItemsvariable declaration - Make a new line above the variable
 - There, create a new variable named 
vegetarianCheckbox - Set 
vegetarianCheckboxto select the<input id="veg">element- Using 
document.querySelector 
 - Using 
 - Under that, create a new variable named 
vegOnly - Set 
vegOnlyto be thecheckedproperty of thevegetarianCheckboxvariable 
Now the function knows if non-vegetarian items should be filtered out, but it still does not know which items are vegetarian!
JavaScript: Vegetarian Property
Currently, the item objects do not have a property denoting which items are vegetarian.
Go through each item object, within the restaurants variable and manually add a veg property - it should be set to true of the item can be vegetarian, and false if the item contains meat.
JavaScript: Filtering the List
There is a very helpful filter function that makes it possible to filter arrays based on functions that return booleans. Passing functions as variables and using arrow function syntax are concepts that will be covered later in this course. For now, try to figure out how to use filter even if you don't fully understand it!
- Under the 
restaurantItemsvariable in thegetFoodfunction, make a new line - There, create an 
ifstatement - For the condition, check if 
vegOnlyis true - In the body, set the 
restaurantItemsvariable to a call torestaurantItems.filter - For the 
filtercall, pass in a function checking if anitemhas avegproperty set totrueitem => item.veg
 
Run the project, check the box, and verify that only vegetarian items appear!