Как можно получить доступ к текущему числу я в цикле 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));
}
ПРИМЕЧАНИЕ. будет работать только для массива без дубликатов.