Как я могу программно рассчитать количество на основе длины материала? - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь рассчитать количество рулонов материала, которое у меня может быть, если я нарежу рулон большего размера на рулоны меньшего размера.

Например, если у меня есть 1 рулон длиной 25 м, я мог бы разрезатьэто в 1 рулон 15 м, 2 рулона 10 м и 5 рулонов 5 м.Поэтому я бы хотел, чтобы мои количества выглядели так:

  • 1 25м
  • 1 15м
  • 2 10м
  • 5 5м

Теперь у меня также может быть количество таких штук, как 1 рулон 25 м, 1 рулон 15 м и 1 рулон 5 м.Тогда это будет выглядеть так:

  • 1 25м
  • 2 15м
  • 3 10м
  • 9 5м

        for (let i = 0; i < this.sizes.length; i++) {
        const size = this.sizes[i];
        for (let j = 0; j < this.cart.items.length; j++) {
            const item = this.cart.items[j];
            if (item.sizeId === size.id) {
                size.quantity -= item.quantity;
            }
            size.amountOfMaterial = size.quantity * size.length;
        }
    }
    

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

Редактировать: ответ ниже в конечном итоге позволил мне придумать это:

calculateQuantities() {
    let quantities = {};
    for (let i = 0; i < this.sizes.length; i++) {
        const size = this.sizes[i];
        for (let j = 0; j < this.cart.items.length; j++) {
            const item = this.cart.items[j];
            if (item.sizeId === size.id) {
                size.quantity -= item.quantity;
            }
        }
        size.actualQuantity = size.quantity;

        let counter = 0;
        for (let j = 0; j < this.sizes.length; j++) {
            const otherSize = this.sizes[j];
            counter += Math.floor(otherSize.length * otherSize.quantity / size.length)
        }
        console.log(`${counter} ${size.length}m`);
        quantities[size.length] = counter;
    }

    for (let i = 0; i < this.sizes.length; i++) {
        this.sizes[i].quantity = quantities[this.sizes[i].length];
    }
}

1 Ответ

0 голосов
/ 30 мая 2018

Если я неправильно понял вопрос, пожалуйста, дайте мне знать, где я ошибся.Я предполагаю, что 25, 15, 10 и 5 предопределены.Это правильно?Я не вижу этого в вашем вопросе.

// Defined lengths
const lengths = [25, 15, 10, 5];
// Some example cart corresponding to how many of each length customer has (this is from your example)
const cart = {25: 1, 15: 1, 5: 1}

for (let length of lengths) {
  //Check for each length in lengths array
  let counter = 0;
  for (let item in cart) {
    // Add the counter if there is enough in cart
    counter += Math.floor(item * cart[item] / length);
  }
  // I am console logging like you showed, but you can do whatever
  console.log(`${counter} ${length}m`)
}

Вывод:

1 25m
2 15m
3 10m
9 5m
...