Hi, I’m trying to complete the following project by doing something “extra”: https://www.codecademy.com/courses/introduction-to-javascript/projects/meal-maker
But I don’t quite understand how to pass just 1 random element into the “getter” part of the object instead of it passing the entire array. Can someone, please, explain what I’m doing wrong?
Thanks!
const menu = {
_meal: ['Pineapple Pizza', 'Chicken Ramen', 'Coconut Curry', 'Carbonara', 'Just a Glass of Water'],
_price: [0.99, 999, 15, 2, 50, 7.50, 8],
set meal(mealToCheck){
mealToCheck = this._meal[Math.floor(Math.random() * this._meal.length)];
if (typeof mealToCheck === 'string') {
return this._meal = mealToCheck;
}
},
set price(priceToCheck) {
priceToCheck = this._price[Math.floor(Math.random() * this._price.length)];
if (typeof priceToCheck === 'number') {
return this._price = priceToCheck;
}
},
get todaysSpecial() {
if (this._meal && this._price) {
return `Today's Special is ${this._meal} for $${this._price}!`
} else {
return 'Meal or price was not set correctly!'
}
}
};
console.log(menu.todaysSpecial);
Math.floor(Math.random() * this._meal.length)
gives you a random integer (whole number) from 0 to one less than the length of of the this._meal
array
(which would be an number you could use as an index to access stuff in this._meal
)
So
this._meal[Math.floor(Math.random() * this._meal.length)];
gets a random meal (because it gets something from the this._meal
array at a random index).
Similarly,
this._price[Math.floor(Math.random() * this._price.length)];
gets a random price.
You have
mealToCheck = this._meal[Math.floor(Math.random() * this._meal.length)];
in the wrong function/setter.
It should not be in set meal(mealToCheck)
function because that line would overwrite the mealToCheck
variable.
Also, the purpose of the meal
setter is to possibly assign something to this._meal
, not to generate a random meal.
(More specifically, that setter is meant to change the value of this._meal
if mealToCheck
is a string;
where mealToCheck
is the “value” being assigned to menu.meal
).
Similarly,
priceToCheck = this._price[Math.floor(Math.random() * this._price.length)];
does not belong in the price
getter.
Getting a random meal and its price belongs in the todaysSpecial()
method
since the purpose of that is to set the ._price
, not to get a random price.
You could have something like the following code in the beginning of the todaysSpecial method
const index = Math.floor(Math.random() * this._meal.length); // gets a random index
const randomMeal = this._meal[index]; // the special is a random meal (the meal at the random index)
const priceOfMeal = this._price[index]; // price of the special
1 Like
Thanks for your explanation, it was really helpful! 