I have completed a JS project that creates a menu, populates it with appetizers, mains and desserts including their price and stores in arrays in menu object. A random selection of appetizers, mains and desserts can be called along with the total price of the meal.
This code works fine but it is not what i want:
const menu = {
_courses: {
appetizers: [],
mains:[],
desserts:[]
},
get appetizers(){
return this._courses.appetizers;
},
get mains(){
return this._courses.mains;
},
get desserts(){
return this._courses.desserts;
},
set appetizers(appetizers) {
this._courses.appetizers = appetizers;
},
set mains(mains) {
this._courses.mains = mains;
},
set desserts(desserts) {
this._courses.desserts = desserts;
},
get courses() {
return {
appetizers: this._courses.appetizers,
mains: this._courses.mains,
desserts: this._courses.desserts
};
},
addDishToCourse(courseName, dishName, dishPrice) {
let dish = {
name: dishName,
price: dishPrice
};
this._courses[courseName].push(dish);
},
getRandomDishFromCourse(courseName) {
let dishes = this._courses[courseName];
let randomIndex = Math.floor(Math.random() * dishes.length);
return dishes[randomIndex];
},
generateRandomMeal() {
let appetizer = this.getRandomDishFromCourse('appetizers');
let main = this.getRandomDishFromCourse('mains');
let dessert = this.getRandomDishFromCourse('desserts');
let totalCost = appetizer.price + main.price + dessert.price;
return `Your meal is ${appetizer.name}, ${main.name} and ${dessert.name} and it costs £${totalCost.toFixed(2)}.`;
},
};
menu.addDishToCourse('appetizers', 'prawncocktail', 4.75);
menu.addDishToCourse('appetizers', 'soup', 3.77);
menu.addDishToCourse('appetizers', 'bread and butter', 1.25);
menu.addDishToCourse('mains', 'steak', 11.75);
menu.addDishToCourse('mains', 'vegetarian', 9.75);
menu.addDishToCourse('desserts', 'ice cream', 3.99);
menu.addDishToCourse('desserts', 'cheese and biscuits', 2.99);
let meal = menu.generateRandomMeal();
console.log(meal);
I want _appetizers: [] not appetizers: []
I have tried to find online documentation to help but so far have failed!
Adding the underscore "_" to appetizers _appetizers in _courses and in the get and set methods causes an error.
This code throws a TypeError
const menu = {
_courses: {
_appetizers: [],
mains:[],
desserts:[]
},
get appetizers(){
return this._courses._appetizers;
},
get mains(){
return this._courses.mains;
},
get desserts(){
return this._courses.desserts;
},
set appetizers(appetizers) {
this._courses._appetizers = appetizers;
},
set mains(mains) {
this._courses.mains = mains;
},
set desserts(desserts) {
this._courses.desserts = desserts;
},
get courses() {
return {
appetizers: this._courses._appetizers,
mains: this._courses.mains,
desserts: this._courses.desserts
};
},
addDishToCourse(courseName, dishName, dishPrice) {
let dish = {
name: dishName,
price: dishPrice
};
this._courses[courseName].push(dish);
},
getRandomDishFromCourse(courseName) {
let dishes = this._courses[courseName];
let randomIndex = Math.floor(Math.random() * dishes.length);
return dishes[randomIndex];
},
generateRandomMeal() {
let appetizer = this.getRandomDishFromCourse('appetizers');
let main = this.getRandomDishFromCourse('mains');
let dessert = this.getRandomDishFromCourse('desserts');
let totalCost = appetizer.price + main.price + dessert.price;
return `Your meal is ${appetizer.name}, ${main.name} and ${dessert.name} and it costs £${totalCost.toFixed(2)}.`;
},
};
menu.addDishToCourse('appetizers', 'prawncocktail', 4.75);
menu.addDishToCourse('appetizers', 'soup', 3.77);
menu.addDishToCourse('appetizers', 'bread and butter', 1.25);
menu.addDishToCourse('mains', 'steak', 11.75);
menu.addDishToCourse('mains', 'vegetarian', 9.75);
menu.addDishToCourse('desserts', 'ice cream', 3.99);
menu.addDishToCourse('desserts', 'cheese and biscuits', 2.99);
let meal = menu.generateRandomMeal();
console.log(meal);
Error:
/home/ccuser/workspace/learn-javascript-objects-meal-maker/app.js:39
this._courses[courseName].push(dish);
^
TypeError: Cannot read property 'push' of undefined
at Object.addDishToCourse (/home/ccuser/workspace/learn-javascript-objects-meal-maker/app.js:39:32)```