Помогите разобраться с индексацией массива в javascript

137
06 декабря 2019, 02:30

Здравствуйте! Помогите, пожалуйста, разобраться с индексацией массива 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, внезапно стала его индексом по которому проверяется наличие нуля. Спасибо!

Answer 1

Для доступа к элементам массива используется Bracket notation

В квадратных скобках может быть абсолютно любая строка, неважно откуда взявшаяся: прописанная напрямую или из какой-либо переменной.

В данном случае используют переменную i, так как из-за условий цикла она будет меняться от минимального индекса массива, до максимального, что позволит проверить все элементы.

Answer 2

Если я правильно поняла вопрос, то нужно понять как работает данный цикл.

for (i=0; i<arr.length; i++) {
    if(arr[i]==0) {
        zero++;
    } }

В этом цикле вы смотрите наличие 0 в массиве arr Для этого естественно нужно пройтись по массиву, т.е. перебрать все элементы и сравнить элемент с 0, и далее по коду.

Короче говоря, вы входите в цикл, присваиваете i = 0, смотрите на arr[0], если он равен нулю, считаете, если нет, инкрементируете i и повторяете итерацию снова.

Если нет, то думаю стоит уточнить, что именно непонятно и тогда будет проще понять, как с этим бороться)

Answer 3

В данном случае это оптимизация производительности (в данном случае на мой взгляд абсолютно бесполезная, хоть и имеет место быть). 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">

READ ALSO
Динамически отслеживаемые props

Динамически отслеживаемые props

Предположим, есть нечто такое:

134
Вопрос по jquery

Вопрос по jquery

кто может подсказать? Есть два скрипта в одно из них touch swipe не работает но работает управление по Click, когда пытаюсь подключить сторонний скрипт...

106
Unexpected token ) на chrome 49, а на 72 все ок

Unexpected token ) на chrome 49, а на 72 все ок

Использую Хром на ХР 49 версии и при загрузке страницы выпадает alert(Unexpected token ) )На версии 72 все отлично работает

133
Условные операторы в javascript

Условные операторы в javascript

Изучаю JS, наткнулся в книге на такой код:

132