Возвращаемое значение, кратное 4

#javascript #angular

#javascript #угловой

Вопрос:

У меня возникли некоторые трудности с моим кодом, а именно связанные с кратными.

Во-первых, если basket.length больше или равно 4 (4, 8, 12, 16…) тогда я хотел бы, чтобы отображался следующий элемент:

 <div class="alert alert-danger" role="alert" *ngIf="basket.length % 4 === 0">
  You need to select at least {{ getNumberOfMuffins() }} muffins 😊
</div>
  

Во-вторых, если значение this.basket.length не равно или больше равно 4 (4, 8, 12, 16…), затем округлите его до следующего значения, кратного 4. Если оно кратно 4, то просто верните число. Например:

если this.basket.length === 3 , то увеличьте до 4, если this.basket.length === 5 затем увеличьте до 8, если this.basket.length === 9 затем увеличьте до 12

 getNumberOfMuffins() {
  // do some stuff
  // return the rounded number of muffins required
}
  

Ответ №1:

Разделите на 4, вызовите Math.ceil , затем умножьте на 4:

 const getNumberOfMuffins = basketLength => 4 * Math.ceil(basketLength / 4);

console.log(getNumberOfMuffins(4));
console.log(getNumberOfMuffins(5));
console.log(getNumberOfMuffins(6));  

Ответ №2:

Наивный и самоописывающийся подход (…3->4, 4-> 8, 5-> 8…):

 getNumberOfMuffins() {
  return this.basket.length   (4 - this.basket.length % 4);
}
  

Наивный и самоописывающийся подход (…3->4, 4-> 4, 5-> 8…):

 getNumberOfMuffins() {
  if (this.basket.length % 4 === 0) return this.basket.length;
  return this.basket.length   (4 - this.basket.length % 4);
}
  

Отличается и сокращается с использованием округления (…3->4, 4-> 4, 5-> 8…):

 getNumberOfMuffins() {
  // divide by 4, floor to hole number (|0), add one and "multiply back" with 4
  return ((this.basket.length/4|0) 1)*4;
}