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!