如何在for循环中访问当前的i数?

时间:2015-11-05 07:36:34

标签: javascript ecmascript-6

给定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. 
}

6 个答案:

答案 0 :(得分:22)

您可以使用entries功能。它将为数组中的每个条目返回一个索引/值对,如:

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

array destructuring一起使用此方法将每个条目解析为相应的变量名称:

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

Babel REPL Example

答案 1 :(得分:14)

没什么简单的......如果你想要"简单的访问"对于数组循环中的项和索引,请使用forEach,例如

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

或作为T.J. Crowder指针退出(我错过了ES6标签)

array.forEach((item, index) => { 
    ... 
});
像许多编程语言一样,javascript有多种方法可以做类似的事情,技巧是为工作选择合适的工具

答案 2 :(得分:5)

你是说这个?

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);
}

答案 3 :(得分:3)

您可以使用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
}

或者,您可以非常轻松地patch in自己的实施

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);

<子> demonstrations

答案 4 :(得分:1)

使用indexOf获取索引

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

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

注意:仅适用于没有重复项的数组。

答案 5 :(得分:0)

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

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