Петли - для каждого, для, для .... из, для ... в - PullRequest
0 голосов
/ 05 июня 2018

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

В приведенном ниже коде, как я могу лучше понять эти различия?

const digits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

for (let i = 0; i < digits.length; i++) {
  console.log(digits[i]);
}

const digits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

for (const index in digits) {
  console.log(digits[index]);
}

const digits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
for (const index of digits) {
  console.log(digits[index]);
}

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

для цикла: Это распространенный метод итерации массива, где мы используем i как index для доступа к элементам в массиве letters. MDN Документы для справки

var letters = ["a","b","c"];
for (let i = 0; i < letters.length; i++)
{
    console.log("Index : "+i, "Value : "+letters[i]);
}

for ... in loop: Этот цикл всегда повторяется по индексу.При перемещении по массиву переменная i будет содержать значение index каждого элемента.Это может использоваться, когда index элементов, необходимых во время итерации. MDN Документы для справки

var letters = ["a","b","c"];
for (var i in letters)
{
    console.log("Index : "+i, "Value : "+letters[i]);
}

for ... of loop: Этот цикл всегда перебирает значения массива.При перемещении по массиву переменная i будет содержать значение элемента.Это можно использовать, если требуется только value элементов в массиве. MDN Документы для справки

var letters = ["a","b","c"];
for (var i of letters)
{
    console.log(i);
}

цикл forEach: Этот цикл выполняет функцию обратного вызова для каждого элемента при прохождении через обр.Параметры для обратного вызова: currentValue, index от currentValue, array, для которого выполняется цикл. MDN Документы для справки

var letters = ["a","b","c"];
letters.forEach(function(value, index, arr){
    console.log("Value : "+value, "Index : "+index, "Complete array : "+arr)
});

Проблема в вашем случае: Код работает нормально в соответствии с потоком.Поскольку у вас есть элементы массива, равные его индексу, вам стало трудно это понимать.

в цикле for ... in: index=0 дает digits[0]=0, index=1 дает digits[1]=1,и т. д.

в for ... цикла: index=0 (где переменная index содержит значение digits[0]), в компиляторе оператора console это значение интерпретируется как index 0Доступ к array d.Следовательно, он возвращает значение digits[0] и т. Д. Для всех элементов.

0 голосов
/ 05 июня 2018

Обычный способ:

for (let i = 0; i < digits.length; i++) {
  console.log(digits[i]);
}

Для цикла используется только условие i.Если условие i < digits.length не выполнено, цикл прервется

Обе другие версии (использующие of и in) являются итераторами, то есть они пойдут и посетят все значения массива.Не нужно указывать, сколько элементов нужно пройти.

Однако они различаются: ключевое слово

  • of будет повторять значения массив

  • in будет перебирать ключевое слово index .

Обычно их следует использовать следующим образом (примеризменено, чтобы показать разницу):

const chars = ['A','B','C'];

for (const index in chars) {
  // index will be 0,1,2
  console.log(chars[index]);
}

Лучше, если вам не нужен индекс неявно

const chars = ['A','B','C'];
for (const value of chars) {
  // value will be 'A','B','C'
  console.log(value);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...