Как я могу использовать переменную в качестве индекса внутри объекта? (Javascript) - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь использовать переменные appetizer, main и десерт в качестве индексов для массива, но не могу понять, как это сделать. Это в строке 49.

    var 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.desserts = desserts;
  },
set mains(mains) {
   this.mains = mains;
},
set desserts(desserts) {
     this.desserts = desserts;
  },
  get courses() {
    return {
      appetizers,
      mains,
      desserts,
    };
  },
  addDishToCourse (courseName, dishName, dishPrice) { 
   const dish = {
     food: courseName,
     name: dishName,
     price: dishPrice,

   };
  return this._courses[courseName].push(dish);
  },
     getRandomDishFromCourse: function(courseName) {
    var dishes = this._courses[courseName];
     if (dishes !== undefined) {
       var randomIndex = Math.floor(Math.random() * dishes.length);
      return randomIndex;
     }
  },

  generateRandomMeal: function() { //This is the problem.
   var appetizer = this.getRandomDishFromCourse('appetizers');
    var main = this.getRandomDishFromCourse('mains');
    var dessert = this.getRandomDishFromCourse('dessert');
    return 'Your meal is ' + appetizer + ', ' + main + ', and ' + dessert + '. The total price is $' +/* this.dish.price */ 8 + '.'; 
  }
}; 

menu.addDishToCourse('appetizers', 'Bread Loaf', 4.25);
menu.addDishToCourse('appetizers', 'Caesar Salad', 3.50);
menu.addDishToCourse('appetizers', 'Small Soup', 4.50);
menu.addDishToCourse('mains', 'Steak Dinner', 20.00);
menu.addDishToCourse('mains', 'spaghetti', 16.00);
menu.addDishToCourse('mains', 'Turkey Dinner', 18.99);
menu.addDishToCourse('desserts', 'Icecream', 5.99);
menu.addDishToCourse('desserts', 'Cookies', 5.99);
menu.addDishToCourse('desserts', 'Jello', 5.99);


var meal = menu.generateRandomMeal();
console.log(meal);

Я пытался использовать этот код:

this.appetizers[appetizer]
this.mains[main]
this.desserts[dessert]

, но это просто возвращает объект объекта вместо номера индекса.

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Вам нужно использовать индексы для доступа к элементам в массивах. То, как вы сейчас это сделаете, будет просто печатать случайные индексы.

var 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.desserts = desserts;
  },
  set mains(mains) {
    this.mains = mains;
  },
  set desserts(desserts) {
    this.desserts = desserts;
  },
  get courses() {
    return {
      appetizers: this.appetizers,
      mains: this.mains,
      desserts: this.desserts,
    };
  },
  addDishToCourse(courseName, dishName, dishPrice) {
    const dish = {
      food: courseName,
      name: dishName,
      price: dishPrice,

    };
    return this._courses[courseName].push(dish);
  },
  getRandomDishFromCourse: function(courseName) {
    var dishes = this._courses[courseName];
    if (dishes !== undefined) {
      var randomIndex = Math.floor(Math.random() * dishes.length);
      return randomIndex;
    }
  },

  generateRandomMeal: function() { //This is the problem.
    var appetizer = this.appetizers[this.getRandomDishFromCourse('appetizers')];
    var main = this.mains[this.getRandomDishFromCourse('mains')];
    var dessert = this.desserts[this.getRandomDishFromCourse('desserts')];
    return 'Your meal is ' + appetizer.name + ', ' + main.name + ', and ' + dessert.name + '. The total price is $' + /* this.dish.price */ 8 + '.';
  }
};

menu.addDishToCourse('appetizers', 'Bread Loaf', 4.25);
menu.addDishToCourse('appetizers', 'Caesar Salad', 3.50);
menu.addDishToCourse('appetizers', 'Small Soup', 4.50);
menu.addDishToCourse('mains', 'Steak Dinner', 20.00);
menu.addDishToCourse('mains', 'spaghetti', 16.00);
menu.addDishToCourse('mains', 'Turkey Dinner', 18.99);
menu.addDishToCourse('desserts', 'Icecream', 5.99);
menu.addDishToCourse('desserts', 'Cookies', 5.99);
menu.addDishToCourse('desserts', 'Jello', 5.99);

//console.log(JSON.stringify(menu, null, 4));

console.log(menu.generateRandomMeal());
0 голосов
/ 14 марта 2020

Ваш getRandomDishFromCourse выбирает случайный индекс из переданного courseName, но возвращает только индекс - вместо него он должен возвратить объект di sh через return dishes[randomIndex];.

. sh возвращается, в generateRandomMeal, вам нужно выбрать каждое * * * * * * * * * * * * * 10 * * для печати и сложить все price *, чтобы получить общую цену:

  getRandomDishFromCourse: function(courseName) {
    var dishes = this._courses[courseName];
    if (dishes !== undefined) {
      var randomIndex = Math.floor(Math.random() * dishes.length);
      return dishes[randomIndex];
    }
  },

  generateRandomMeal: function() { //This is the problem.
    var appetizer = this.getRandomDishFromCourse('appetizers');
    var main = this.getRandomDishFromCourse('mains');
    var dessert = this.getRandomDishFromCourse('desserts');
    return 'Your meal is ' + appetizer.name + ', ' + main.name + ', and ' + dessert.name +
      '. The total price is $' + (appetizer.price + main.price + dessert.price).toFixed(2)
  }

var 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.desserts = desserts;
  },
  set mains(mains) {
    this.mains = mains;
  },
  set desserts(desserts) {
    this.desserts = desserts;
  },
  get courses() {
    return {
      appetizers,
      mains,
      desserts,
    };
  },
  addDishToCourse(courseName, dishName, dishPrice) {
    const dish = {
      food: courseName,
      name: dishName,
      price: dishPrice,

    };
    return this._courses[courseName].push(dish);
  },
  getRandomDishFromCourse: function(courseName) {
    var dishes = this._courses[courseName];
    if (dishes !== undefined) {
      var randomIndex = Math.floor(Math.random() * dishes.length);
      return dishes[randomIndex];
    }
  },

  generateRandomMeal: function() { //This is the problem.
    var appetizer = this.getRandomDishFromCourse('appetizers');
    var main = this.getRandomDishFromCourse('mains');
    var dessert = this.getRandomDishFromCourse('desserts');
    return 'Your meal is ' + appetizer.name + ', ' + main.name + ', and ' + dessert.name +
      '. The total price is $' + (appetizer.price + main.price + dessert.price).toFixed(2)
  }
};

menu.addDishToCourse('appetizers', 'Bread Loaf', 4.25);
menu.addDishToCourse('appetizers', 'Caesar Salad', 3.50);
menu.addDishToCourse('appetizers', 'Small Soup', 4.50);
menu.addDishToCourse('mains', 'Steak Dinner', 20.00);
menu.addDishToCourse('mains', 'spaghetti', 16.00);
menu.addDishToCourse('mains', 'Turkey Dinner', 18.99);
menu.addDishToCourse('desserts', 'Icecream', 5.99);
menu.addDishToCourse('desserts', 'Cookies', 5.99);
menu.addDishToCourse('desserts', 'Jello', 5.99);


var meal = menu.generateRandomMeal();
console.log(meal);

(* * * * * * * toFixed(2) требуется после итога, чтобы избежать проблем с плавающей запятой)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...