Дублируются данные в цикле
Всем привет, столкнулся с проблемой и вообще не понимаю как решить. Есть функция, которая на вход принимает массив из чисел (но он может быть и пустым), и создает несколько наборов чисел (равное 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 = ''
}
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 шт):
У вас много лишних действий в функциях
Если я правильно понял вашу задачу, вот этот код должен сработать:
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 и добавить функции вставки на страницу