как суммировать значения в зависимости от установленного флажка - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь сложить числа вместе как итоговое значение, в зависимости от того, какой элемент отмечен для отображения как общее на моей странице оформления заказа.

Я пытался

if ( this.products[0].selected === true ) {
this.summary = this.products[0].price
} else if ( this.products[0].selected === true, this.products[1].selected === true  ) {
this.summary = this.products[0].price + this.products[1].price 
} else {
this.summary = 0;
}

Очевидно, нетполное утверждение, но это даже не сработало.

У меня есть массив объектов, содержащих это

data: {
  summary: 0,
  products: [
    { name: 'Hemsida', price: 290, selected: false },
    { name: 'Copywriting', price: 190, selected: false },
    { name: 'Fotografering', price: 190, selected: false }
  ]
}

, и когда я проверяю свой флажок, он превращает ссылку на! products [0] .selected

Моя последняя попытка была с оператором switch, возможно, я полностью его зарезал, поскольку это мой первый оператор switch на поле: P

  priceSummary() {
    switch (
      (this.products[0].selected,
      this.products[1].selected,
      this.products[2].selected)
    ) {
      case (true, false, false):
        this.summary = this.products[0].price
        break
      case (true, true, false):
        this.summary = this.products[0].price + this.products[1].price
        break
      case (true, false, true):
        this.summary = this.products[0].price + this.products[2].price
        break
      case (false, false, true):
        this.summary = this.products[2].price
        break
      case (false, true, false):
        this.summary = this.products[1].price
        break
      case (false, false, false):
        this.summary = 0
        break
      case (true, true, true):
        this.summary =
          this.products[0].price +
          this.products[1].price +
          this.products[2].price
      default:
        this.summary = 0
    }

Это что-то делает, но он не делает то, что должен: P вроде повсюду.помочь кому-нибудь ???

Ответы [ 3 ]

1 голос
/ 20 марта 2019

Что-то в этом роде:

//looping on products
this.product.forEach((prod) => {
 //checking if product is selected
 if(prod.selected === true){
  // if it's selected, adding its price to the sum
  this.summary += prod.price
 }
}

?

0 голосов
/ 20 марта 2019

Лучший способ, как говорит @Nil выше. Но если вам нужна «не повторяемая» версия без цикла, вы можете сделать это так:

priceSummary() {
    this.summary = 0

    if(this.products[0].selected) {
        this.summary += this.products[0].price // same as this.summary = this.summary + this.products[0].price
    }

    if(this.products[1].selected) {
        this.summary += this.products[1].price
    }

    if(this.products[2].selected) {
        this.summary += this.products[2].price
    }
}
0 голосов
/ 20 марта 2019

Если вы используете методы массива, каждый шаг может быть действительно простым и читабельным. Помимо нескольких крайних случаев, оператор switch не должен заменять цикл.

const model = {
  data: {
    summary: 0,
    products: [
      { name: 'Hemsida', price: 290, selected: true },
      { name: 'Copywriting', price: 190, selected: true },
      { name: 'Fotografering', price: 190, selected: false }
    ]
  }
};
// Create an array of only selected products.
const selected_products = model.data.products.filter( product => product.selected );
// Sum the prices of the selected products.
const price = selected_products.reduce(( sum, product ) => sum + product.price, 0 );

model.data.summary = price;

console.log( model.data.summary );
...