Метод splice не успевает (js)

Вот разметка

<button style="width: 50px; height: 50px;"></button>

А вот сам скрипт

function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}
var array = ['один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять', 'десять', 'одиннадцать', 'двенадцать'];
var btn = document.getElementsByTagName('button')[0];
btn.onclick = function(){
    var random = getRandomInt(0, array.length);
    console.log(array[random]);
    array.splice(random, 1);
}

Периодически выводится значение undefined. Я не могу понять почему это происходит. Скажите пожалуйста в чем проблема и как ее решить


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

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

вот ваша функция

function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

давайте посмотрим, что происходит с массивом из 10 элементов -

вы вызываете так:

getRandomInt(0, 10)

и значит будет возвращено:

Math.random() * (10 - 0 + 1)) + 0 = 11 * Math.random()

Допустим Math.random() сгенерирует 0,999, в результате получится 10 и вы обращаетесь к 10 элементу, но в массиве из 10 элементов лишь 0..9 индексы

Так что формула по хорошему должна быть все таки

return Math.floor(Math.random() * (max - min)) + min;
→ Ссылка