Math.random массив длины +1? - PullRequest
0 голосов
/ 10 мая 2011

Я не понимаю что-то в этом коде:

vars.randAnim = anims[Math.floor(Math.random()*(anims.length + 1))];

Допустим, у нас есть новый Array, с 5 элементами, поэтому от индекса 0 до индекса 4

Тогдаскажем, Math.random() возвращает 1. Итак, у нас есть пол 1*5, но индекс 5 не существует в моем Array, плюс здесь мы добавляем "+1"

Почему +1?Я бы ожидал с точностью до -1.

Ответы [ 2 ]

1 голос
/ 10 мая 2011

Код неверный (как сказал Рокет).Это должно быть

Math.floor(Math.random()*(anims.length))

Но у рассуждений есть недостаток: Math.random () не может вернуть «1».

1 голос
/ 10 мая 2011

Math.random не возвращает 1, возвращает значение от 0 до 1. Math.floor в основном усекает десятичное значение значения.

Итак, если Math.random возвращает 0.3984753005206585 и умножить его на 4, мы получим 1.593901202082634, который становится 1 после Math.floor.

Когда вы хотите получить случайное значение из массива, вы умножаете Math.random на длину, чтобы она возвращала значения в диапазоне от 0 до длины (но не длины).

Неверный anims.length + 1 в приведенном выше коде.

...