Здравствуйте! Помогите, пожалуйста, разобраться с индексацией массива arr в следующем примере (учебное упражнение, реализующее рулетку):
<meta charset="utf-8">
<script>
var arr = [];
var rounds = 100;
var zero = 0;
var i = 0;
for(i=0; i<=rounds; i++) {
arr.push(Math.round(Math.random()*36));
}
alert(arr);
for (i=0; i<arr.length; i++) {
if(arr[i]==0) {
zero++;
}
}
alert("Вероятность выпадания зеро: "+zero/arr.length*100+"%");
</script>
Все в принципе понятно, за исключением единственного момента: условие в теле второго цикла, которое проверяет наличие zero if(arr[i]==0). Почему i, которая ранее в коде была обьявлена как обычная переменная, использовалась в качестве счетчика и никоим образом не была связана с массивом arr, внезапно стала его индексом по которому проверяется наличие нуля. Спасибо!
Для доступа к элементам массива используется Bracket notation
В квадратных скобках может быть абсолютно любая строка, неважно откуда взявшаяся: прописанная напрямую или из какой-либо переменной.
В данном случае используют переменную i, так как из-за условий цикла она будет меняться от минимального индекса массива, до максимального, что позволит проверить все элементы.
Если я правильно поняла вопрос, то нужно понять как работает данный цикл.
for (i=0; i<arr.length; i++) {
if(arr[i]==0) {
zero++;
} }
В этом цикле вы смотрите наличие 0 в массиве arr
Для этого естественно нужно пройтись по массиву, т.е. перебрать все элементы и сравнить элемент с 0, и далее по коду.
Короче говоря, вы входите в цикл, присваиваете i = 0, смотрите на arr[0], если он равен нулю, считаете, если нет, инкрементируете i и повторяете итерацию снова.
Если нет, то думаю стоит уточнить, что именно непонятно и тогда будет проще понять, как с этим бороться)
В данном случае это оптимизация производительности (в данном случае на мой взгляд абсолютно бесполезная, хоть и имеет место быть). i объявляется один раз а не 2:
var arr = [];
var rounds = 100;
var zero = 0;
for (var i = 0; i <= rounds; i++) {
arr.push(Math.round(Math.random() * 36));
}
alert(arr);
for (var i = 0; i < arr.length; i++) {
if (arr[i] == 0) {
zero++;
}
}
alert("Вероятность выпадания зеро: " + zero / arr.length * 100 + "%");
<meta charset="utf-8">
Продвижение своими сайтами как стратегия роста и независимости