javascript - 为什么我不能总结数组的所有属性?

标签 javascript oop

我想总结数组this.hamburgers的所有属性price,以便找到它们的总金额,并在将来找到订单的平均成本我想转移到 localStorage

但是当我尝试在 sumHamburgers() 方法中获取 price 的所有属性时,我得到的结果是:“未定义”

class Magazine {
  constructor() {
    this.hamburgers = [];
  }

  sumHamburgers() {
    return this.hamburgers.map(el => el.price).reduce((p, c) => p + c);
  }

  hamburgersAvgN() {
    return this.sumHamburgers() / Hamburger.counter;
  }

  toStorage() {
    let serialCounter = JSON.stringify(Hamburger.counter);
    let serialAvgN = JSON.stringify(this.hamburgersAvgN());
    return localStorage.setItem(['orders', 'avg'], [`number of orders: ${serialCounter}`, ` average check: ${serialAvgN} UAH`]);
  }
}

class Hamburger {
  constructor(size, ...stuffing) {
    this.size = size;
    this.stuffing = stuffing;
    this.toppingArr = [];
    this.counter = ++Hamburger.counter;
  }

  calculatePrice() {
    const stuffingCost = this.stuffing.map(el => el.price).reduce((p, c) => p + c);
    let allCost;
    if (this.toppingArr.length === 0) {
      return allCost = this.size.price + stuffingCost;
    } else {
      const toppingCost = this.toppingArr.map(el => el.price).reduce((p, c) => p + c);
      return allCost = this.size.price + stuffingCost + toppingCost;
    }
  }
}

Hamburger.counter = 0;

Hamburger.small = {
  name: 'small',
  price: 10,
  kcal: 200
}

Hamburger.cheese = {
  name: 'cheese',
  price: 4,
  kcal: 10
}

Hamburger.meet = {
  name: ' meet',
  price: 40,
  kcal: 103
}

let magazine = new Magazine;
magazine.hamburgers.push(new Hamburger(Hamburger.small, Hamburger.meet));
magazine.hamburgers.push(new Hamburger(Hamburger.small, Hamburger.cheese));
magazine.hamburgers.push(new Hamburger(Hamburger.small, Hamburger.meet));

console.log(magazine.sumHamburgers());

最佳答案

您想要调用 el.caculatePrice() 而不是不存在的 el.price:

class Magazine {
  constructor() {
    this.hamburgers = [];
  }

  sumHamburgers() {
    // My fix is here: `el.calculatePrice()` instead of `el.price`
    return this.hamburgers.map(el => el.calculatePrice()).reduce((p, c) => p + c);
  }

  hamburgersAvgN() {
    return this.sumHamburgers() / Hamburger.counter;
  }

  toStorage() {
    let serialCounter = JSON.stringify(Hamburger.counter);
    let serialAvgN = JSON.stringify(this.hamburgersAvgN());
    return localStorage.setItem(['orders', 'avg'], [`number of orders: ${serialCounter}`, ` average check: ${serialAvgN} UAH`]);
  }
}

class Hamburger {
  constructor(size, ...stuffing) {
    this.size = size;
    this.stuffing = stuffing;
    this.toppingArr = [];
    this.counter = ++Hamburger.counter;
  }

  calculatePrice() {
    const stuffingCost = this.stuffing.map(el => el.price).reduce((p, c) => p + c);
    let allCost;
    if (this.toppingArr.length === 0) {
      return allCost = this.size.price + stuffingCost;
    } else {
      const toppingCost = this.toppingArr.map(el => el.price).reduce((p, c) => p + c);
      return allCost = this.size.price + stuffingCost + toppingCost;
    }
  }
}

Hamburger.counter = 0;

Hamburger.small = {
  name: 'small',
  price: 10,
  kcal: 200
}

Hamburger.cheese = {
  name: 'cheese',
  price: 4,
  kcal: 10
}

Hamburger.meet = {
  name: 'meet',
  price: 40,
  kcal: 103
}

let magazine = new Magazine;
magazine.hamburgers.push(new Hamburger(Hamburger.small, Hamburger.meet));
magazine.hamburgers.push(new Hamburger(Hamburger.small, Hamburger.cheese));
magazine.hamburgers.push(new Hamburger(Hamburger.small, Hamburger.meet));

console.log(magazine.sumHamburgers());

关于javascript - 为什么我不能总结数组的所有属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52607663/

相关文章:

javascript - 禁用提交按钮作为默认状态,直到所有输入都填充到 Angular js 中

javascript - 是否可以检查函数是 javascript 函数还是开发人员定义的函数?

php - 你能在一节课中扩展两个类吗?

java - getResources 作为全局变量

java - 设计包含生成 ID 的 Java 类的最佳方法

javascript - 使一个 Controller 依赖于另一个 Controller 的范围

javascript - 单击图像时,图像列表中的同一图像以模态显示

c++ - C++ 用法/技巧中的虚拟继承

c++ - 什么时候调用右值析构函数/这样可以吗

JavaScript 日期与月份冲突