Я пытаюсь создать действительно простой скрипт для создания 2-мерного массива, в котором каждый n-й массив не содержит собственного индекса в качестве элемента, но содержит случайное количество других рандомизированных значений индекса в качестве своих элементов и не может быть пустым. Вот небольшой код, который я написал, чтобы попытаться добиться этого:
totElList = []
numEls = 1000
for (i=0;i<numEls;i++) {
totElList[i] = []
for (j=0;j<numEls;j++) {
totElList[i][j] = j
}
}
for (i in totElList) {
totsplice = Math.round(Math.random()*(numEls-1))
totElList[i].splice(i,1)
for (j=0;j<totsplice;j++) {
rand = Math.round(Math.random()*totElList[i].length)
while (typeof(totElList[i][rand]) === undefined) {rand = Math.round(Math.random()*totElList[i].length)}
totElList[i].splice(rand,1)
}
}
Проблема в том, что когда я запускаю это, кажется, что массив totElList содержит больше 0, чем любое другое число, хотя я предполагал, что элементы будут удалены случайным образом. Я сделал тест, чтобы подтвердить это. Количество нулей всегда является максимальным из всех возможных значений для данного числа. Я предполагаю, что это как-то связано с работой Math.random () и Math.round (), но я не уверен. Не мог бы кто-нибудь дать мне некоторое представление? Спасибо.
вместо Math.round возьмите Math.floor, который лучше работает для индексов, потому что он отсчитывается от нуля.
Вы можете уменьшить количество, если он работает медленно для вас. Я понимаю, что вы имеете в виду с Math.floor, хотя это работает как шарм, спасибо. Я думаю, это была просто проблема с числами, которая сбивала меня с толку ... не в первый раз.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вместо Math.round возьмите Math.floor, который лучше работает для индексов, потому что он основан на нуле.
Example with one digit and a factor of 2 as index for an array with length of 2.
As you see, the second half index is moved to the next index of every number, which results into a wrong index and with the greatest random value, you get an index outside of the wanted length.
value round floor comment for round ----- ----- ----- ----------------- 0.0 0 0 0.1 0 0 0.2 0 0 0.3 0 0 0.4 0 0 0.5 1 0 wrong index 0.6 1 0 wrong index 0.7 1 0 wrong index 0.8 1 0 wrong index 0.9 1 0 wrong index 1.0 1 1 1.1 1 1 1.2 1 1 1.3 1 1 1.4 1 1 1.5 2 1 wrong index 1.6 2 1 wrong index 1.7 2 1 wrong index 1.8 2 1 wrong index 1.9 2 1 wrong index
прошу добавить рабочий пример. на самом деле это работает вечно.