Дублируются данные в цикле

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

function createTickets(mas) {
    let ticket = ''
    let tcount = document.getElementById('tcount').value
    for (t = 0; t < tcount; t++) {
        let numbers = []
        numbers.splice(0, numbers.length);
        numbers.length = 0;
        console.log(numbers)
        numbers = generate(mas);
        let ticketItem = ''
        numbers.forEach(n => {
            ticketItem += `<div class="ticket-item" data-select="${n}">${n}</div>`
        })
        ticket += `<div class="ticket-block">${ticketItem}</div>`
        numbers = []
        console.log(numbers)
    }

    ticketslist.insertAdjacentHTML('beforeend', ticket)
    numbers = []
    createTicketsButton.disabled = true
    ticket = ''
}
и функция generate(),

function generate(mas) {
    let arr = []
    arr.splice(0, arr.length);
    arr.length = 0;
    let max_number, i, unic;
    arr = (mas.length != 0) ? mas : []
    max_number = 6;
    while (arr.length < 6) {
        do {
            unic = true;
            a = Math.floor(Math.random() * 36) + 1;
            for (i = 0; i < arr.length; i++) {
                if (a == arr[i]) {
                    // такое число уже было
                    unic = false;
                    break;
                }
            }
        } while (!unic) // повторить генерацию числа
        arr.push(a);
    }
    return arr
}

которая генерирует массив случайных чисел с учетом входящего параметра(массив mas). Проблема в том, что если массив mas пустой, все работает как надо, а если в нем есть элементы - дублирует набор чисел в количестве равном tcount Подскажите пожалуйста, в чем ошибка? Заранее спасибо!


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

Автор решения: HaZcker

У вас много лишних действий в функциях
Если я правильно понял вашу задачу, вот этот код должен сработать:

function createTickets(mas) {
  let ticket = ''
  let tCount = 10

  for (let i = 0; i < tCount; i++) {
    const numbers = generate(mas)

    let ticketItem = ''

    numbers.forEach(n => {
      ticketItem += `<div class="ticket-item" data-select="${n}">${n}</div>`
    })

    ticket += `<div class="ticket-block">${ticketItem}</div>`
  }
}

function generate(mas) {
  const result = mas && [...mas] || []

  while (result.length < 6) {
    const a = Math.floor(Math.random() * 36) + 1
    !result.includes(a) && result.push(a);
  }

  return result
}

P.S. - не забудьте поменять инициализацию у tCount и добавить функции вставки на страницу

→ Ссылка