【问题标题】:How can I use a variable as an index inside of an object? (Javascript)如何将变量用作对象内的索引? (Javascript)
【发布时间】:2020-06-25 22:17:53
【问题描述】:

我正在尝试使用变量 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]

但这只是返回 Object 对象而不是索引号。

【问题讨论】:

    标签: javascript arrays object indexing


    【解决方案1】:

    您的getRandomDishFromCourse 从传递的courseName 中选择一个随机索引,但它只返回索引 - 它应该通过return dishes[randomIndex]; 返回一个菜对象。

    菜品退回后,在generateRandomMeal中,您需要选择每个菜品的name属性进行打印,并将所有prices相加得出总价:

      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)以避免浮点问题)

    【讨论】:

      【解决方案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: 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());

      【讨论】:

        猜你喜欢
        • 2013-10-11
        • 2011-03-21
        • 1970-01-01
        • 2020-03-17
        • 2022-12-05
        • 1970-01-01
        • 1970-01-01
        • 2022-11-28
        相关资源
        最近更新 更多