@khalel2

Как правильно написать алгоритм чтобы менять данные в массиве?

let selectedBook = 32;


let books = [
  {
    "id": 19,
    "user_id": "3",
    "book_id": 32,
    "status": "1",
    "count": "5",
    "borrowed_at": "2023-08-16 23:51:42",
    "title": "Улицы разбитых фонарей",
    "author": "Ескеевич А.С.",
    "isbn": "2036820",
    "isBookAccepted": false,
    "counter": "5"
  },
  {
    "id": 20,
    "user_id": "3",
    "book_id": 32,
    "status": "1",
    "count": "5",
    "borrowed_at": "2023-08-16 23:51:45",
    "title": "Улицы разбитых фонарей",
    "author": "Ескеевич А.С.",
    "isbn": "2036820",
    "isBookAccepted": false,
    "counter": "5"
  },
  {
    "id": 21,
    "user_id": "3",
    "book_id": 32,
    "status": "1",
    "count": "5",
    "borrowed_at": "2023-08-17 00:55:30",
    "title": "Улицы разбитых фонарей",
    "author": "Ескеевич А.С.",
    "isbn": "2036820",
    "isBookAccepted": false,
    "counter": "5"
  }
]

Нужно написать метод который сравнивает selectedBook и book_id каждого обьекта. Если айдишники совпадают надо уменьшить counter текущего обьекта. Как только counter первого обьекта достигнет 0 надо поменять isBookAccepted на true, и переходить к следуещему обьекту. тобишь по очереди. в массиве books могут быть обьекты с другими book_id, поэтому если не совпадает selectBook и book__id идем дальше. Метод вызывается при клике, за один клик уменьшаем сounter на один ОДНОГО обьекта.
  • Вопрос задан
  • 125 просмотров
Пригласить эксперта
Ответы на вопрос 2
@historydev Куратор тега JavaScript
Острая аллергия на анимешников
1. Помещайте код в тег кода.
2. Счётчик должен быть типа integer/number.
Ответ написан
Комментировать
@Smirator
Привет, не смотря на то, что твой вопрос это не вопрос, а ТЗ, попробуй так:

function updateBookCounterAndStatus(selectedBookId, booksArray) {
  for (let i = 0; i < booksArray.length; i++) {
    if (booksArray[i].book_id === selectedBookId) {
      if (booksArray[i].counter > 0) {
        booksArray[i].counter--;
        if (booksArray[i].counter === 0) {
          booksArray[i].isBookAccepted = true;
        }
        break; // прекратили перебор
      }
    }
  }
}

// Вызываем:
updateBookCounterAndStatus(selectedBook, books);
console.log(books);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы