Как можно получить доступ к текущему числу я в цикле for?

При заданном для цикла значение назначенной переменной (i для этого примера) равно тому, что array[i] будет равным, если бы это было нормальным для цикла. Как можно получить доступ к индексу массива, к которому в данный момент находится i.

Что я хочу

let array = ["one", "two", "three"];

for (let i of array) {
  console.log(i);// normally logs cycle one : "one", cycle two : "two", cycle three : "three".
  console.log(/*what equals the current index*/);// what I want to log cycle one : 1, cycle two : 2, cycle three : 3. 
}

Ответы

Ответ 1

ничего простого... если вы хотите "простой доступ" к элементу и индексу в цикле над массивом, используйте forEach например.

array.forEach(function(item, index) { 
... 
});

или как T.J. Указатель Crowder (и я пропустил тег ES6)

array.forEach((item, index) => { 
    ... 
});

как и многие языки программирования, javascript имеет несколько способов делать подобные вещи, умение заключается в выборе правильного инструмента для задания

Ответ 2

Вы можете использовать функцию entries. Он вернет пара индексов/значений для каждой записи в массиве, например:

[0, "one"]
[1, "two"]
[2, "three"]

Используйте это в тандеме с деструктурирование массива, чтобы разрешить каждую запись соответствующему имени переменной:

const arr = ["one", "two", "three"]
for(const [index, value] of arr.entries()) {
  console.log(index, value);
}

Пример Babel REPL

Ответ 3

Вы имеете в виду это?

array = ["one", "two", "three"];

for (i = 0; i < array.length; i++) {
  console.log(i); // Logs the current index number;
  console.log(array[i]); // Logs the index matching in the array;
}

Также хорошим comment из Kaiido было то, что вы можете использовать это, чтобы получить значение из массива непосредственно как переменная.

for (var ind = 0, i=array[ind]; ind < array.length; i=array[++ind]) {
    console.log(i);
    console.log(ind);
}

Ответ 4

Вы можете использовать функцию entries(), чтобы получить итератор, содержащий индексы.

for (let [index, value] of [1, 2, 3].entries())
  console.log(index + ':' + value);

или, если вам не нравится обозначение let [,]:

for (let entry of [1, 2, 3].entries())
  console.log(entry[0]+ ':' + entry[1]);

Но как насчет других массивов? Ну, вы можете просто просто позаботиться об этом сами, действительно

let index = 0;
for (let ch of 'abcd') {
  ++index;
  //your code
}

Или вы можете легко патч собственной реализации

Object.defineProperty(String.prototype, 'indexerator', {get:function() {
    var elements = this[Symbol.iterator]();
    var index = 0;
    var output;

    return {
        [Symbol.iterator] : function() { return this; },
        next : function() {
            if (!(output = elements.next()).done)
                output.value = [index++, output.value];
            return output;
        }
    };
}});

/*other code*/

for (let [index, ch] of 'abcd'.indexerator)
  console.log(index + ':' + ch);

демонстрации

Ответ 5

используйте indexOf, чтобы вернуть индекс

let array = ["one", "two", "three"];

for (let i of array) {
  console.log(i);
  console.log(array.indexOf(i));
}

ПРИМЕЧАНИЕ. будет работать только для массива без дубликатов.