Цикл for. Есть ли возможность в цикле перебросить входящее значение на другой объект?

Есть часть кода. В цикл с фронта будут приходить страницы, которые сравниваются с количеством страниц в книге с массива и по результату, если количество входящих страниц больше, чем страниц в книге - она закрывается. Вопрос: можно ли реализовать, что бы разницу страниц(переполнение) перебрасывать на следующую книгу в массиве?

        for (let i = 0; i < training.books.length; i++) {
      book = await Book.findOne({ _id: training.books[i] });

      if (book?.numberOfPages === book?.readPages) {
        continue;
      }

      book.readPages += pages;

      if (book.readPages > book.numberOfPages) {
        book.readPages = book.numberOfPages;
      }

      await book.save();

      break;
    }
...
    });

Например пришло 25 страниц c const { pages: 25 } = req.body;

они попадают в book.readPages += pages; первой книги

после чего сравнивается прочитанные страницы book.readPages: 25

со страницами в книге у которой общее количество страниц 15 book.numberOfPages: 15

и через if в коде выше если book.readPages > book.numberOfPages то book.readPages = book.numberOfPages

и в ответе приходит по первой книге {readPages: 15, numberOfPages: 15}

как оставшиеся 10 страниц перебросить в book.readPages: 10 второй книги у которой book.numberOfPages: 99

и при следующем const { pages: 25 } = req.body;

у второй книги уже в book.readPages: 35, а не book.readPages: 25

надеюсь уточнил вопрос?

=======================

Попробовал, нужного мне результата нет, после ввода

const { pages: 49 } = req.body;

пришел ответ

{
   "date": "2021-04-22 19:42:45",
   "pageCount": 49
 } 

книга1 закрылась как и раньше

"book1": {
            "readPages": 45,
            "numberOfPages": 45,         
        }

при следующем добавлении

const { pages: 7 } = req.body;

ответ

{
  "date": "2021-04-22 19:42:45",
  "pageCount": 49
},
{
   "date": "2021-04-22 19:52:37",
   "pageCount": 7
 }

книга2 получает в readPages только второй запрос, разница в 4 страницы в нее не попала

"book2": {
            "readPages": 7,
            "numberOfPages": 19,         
        }

UPD

if (book?.numberOfPages === book?.readPages) {
    // totalPages -= book.numberOfPages; здесь нужен ?
    continue;
  }

здесь не нужно


Ответы (1 шт):

Автор решения: OPTIMUS PRIME

Нужна внешняя переменная, которая будет хранить сумму всех прилетевших страниц. Пробуйте:

let totalPages = 0;
// Число может храниться и в каком-то объекте / файле.

const { pages } = req.body;
totalPages += pages; // <--

/***/
for (let i = 0; i < training.books.length; i++) {
  book = await Book.findOne({ _id: training.books[i] });

  if (book?.numberOfPages === book?.readPages) {
    // totalPages -= book.numberOfPages; здесь нужен ?
    continue;
  }

  book.readPages += totalPages; // <--

  if (book.readPages > book.numberOfPages) {
    book.readPages = book.numberOfPages;
    totalPages -= book.numberOfPages; // <--
  }

  await book.save();

  break;
}
//...

→ Ссылка