Как можно использовать условный оператор внутри функции, который ссылается на параметр внутри вложенной функции, чтобы вернуть результат в javascript? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть корзина, в которой я должен иметь возможность добавить условную скидку к функции, которая в настоящее время получает цену товара и умножает ее на количество. В настоящее время функция работает как брелок без скидки, однако скидка должна быть в состоянии определить, есть ли два или более элемента с одинаковым «тегом» (например, «сырная пицца», «грибная пицца», «гавайская пицца») а затем вычтите сумму из возвращенной суммы для его работы. Как мне этого добиться?

Эта функция получает общую стоимость всех предметов в корзине пользователя

 get totalAmount() {
 let total = 0;
 this.cart.forEach(item => (total += this.getItemTotal(item)));

 ///// possible conditional statement here
 ////// something like  if (item.tags == "cheese"){
 /////// return total - 2;   }
 //////// ( currently just errors out to "**item not found**" even though I thought   
 ///// since the parameter "item" was in the function within the function it could recognize it)             


return total;
}

Эта функция находится внутри вышеуказанной функции. Он используется для получения промежуточного итога по отдельному предмету, включая его параметры

getItemTotal(item) {
 let total = item.price * item.quantity;

  item.options.forEach(option => (total += option.value * item.quantity));
  return total;
  }

Ниже приведен пример предмета с «биркой» сыра. Условный блок должен определить, есть ли два тега, которые похожи на тег сыра, а затем отнять 2 доллара от суммы в первой функции

     "item": [
     {
     "id": 1,
     "guid": "1d4aa3b2-c059-4fa7-a751-9bca735e4ea1",
     "thumb": "https://foodorderingapp9309.s3-us-west- 
     1.amazonaws.com/CheesySenstions/menu/CheesePizza.JPG",
     "title": "Cheese",
     "body": "try new cheese pizza",
     "tags": ["pizza"],
     }
     ]

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Вы можете получить доступ к элементу внутри обратного вызова forEach l oop.

Вы можете использовать counter для подсчета количества элементов с помощью Speci c тег. Вот пример:

get totalAmount() {
  let total = 0;
  let numberOfItemsWithCheeseTag = 0;

  this.cart.forEach(item => {
    total += this.getItemTotal(item);

    // Increment the counter if 'cheese' is one of the tags
    if (item.tags.includes('cheese')) {
      numberOfItemsWithCheeseTag += 1; // 
    }
  });

  // Apply the discount if the counter reached a threshold
  if (numberOfItemsWithCheeseTag >= 2) {
    total -= 2;
  }        

  return total;
}
0 голосов
/ 09 апреля 2020

Вот другой дубль

get totalAmount() {
    let total = this.cart.reduce((t, item) => t + this.getItemTotal(item), 0)
    const count = this.cart.reduce((c, item) => c + item.tags.includes('cheese'), 0)

    if (count >= 2) {
        return total -= 2
    }

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