当前位置: 首页 > 知识库问答 >
问题:

使用JavaScript中的for…语法获取循环计数器/索引

东郭京
2023-03-14

问题仍然适用于< code>for…of循环。

我知道JavaScript中基本的< code>for…in语法是这样的:

for (var obj in myArray) {
    // ...
}

但是如何获取循环计数器/索引

var i = 0;
for (var obj in myArray) {
    alert(i)
    i++
}
for (var i = 0; i < myArray.length; i++) {
    var obj = myArray[i]
    alert(i)
}

但我宁愿使用更简单的for-in循环。我认为它们看起来更好,更有意义。

有没有更简单或更优雅的方式?

for i, obj in enumerate(myArray):
    print i

共有3个答案

郑帅
2023-03-14

这个怎么样

let numbers = [1,2,3,4,5]
numbers.forEach((number, index) => console.log(`${index}:${number}`))

其中 array.forEach 此方法有一个索引参数,该参数是数组中正在处理的当前元素的索引。

印季
2023-03-14

在ES6中,最好使用for…of循环。您可以在<code>中获得

for (let [index, val] of array.entries()) {
  // your code goes here    
}

请注意,< code>Array.entries()返回一个迭代器,这使得它可以在for-of循环中工作;不要将其与Object.entries()混淆,后者返回一个键值对数组

莘俊能
2023-03-14

< code>for…in迭代属性名,而不是值,并且以未指定的顺序进行(是的,甚至在ES6之后)。你不应该用它来迭代数组。对他们来说,ES5的< code>forEach方法将值和索引传递给你给它的函数:

var myArray = [123, 15, 187, 32];

myArray.forEach(function (value, i) {
    console.log('%d: %s', i, value);
});

// Outputs:
// 0: 123
// 1: 15
// 2: 187
// 3: 32

或者ES6的Array.prototype.entries,它现在支持跨当前浏览器版本:

for (const [i, value] of myArray.entries()) {
    console.log('%d: %s', i, value);
}

但是,对于一般的可重复项(在这种情况下,您将使用< code>for…of循环,而不是< code>for…in),没有任何内置内容:

function* enumerate(iterable) {
    let i = 0;

    for (const x of iterable) {
        yield [i, x];
        i++;
    }
}

for (const [i, obj] of enumerate(myArray)) {
    console.log(i, obj);
}

演示

如果你真的有意思...in – 枚举属性 – 您将需要一个额外的计数器。Object.keys(obj).forEach 可以工作,但它只包含自己的属性;为。。。in 包括原型链上任何位置的可枚举属性。

 类似资料:
  • 问题内容: 在遍历列表的Python循环中,我们可以编写: 并巧妙地遍历列表中的所有元素。有没有办法知道循环中到目前为止我循环了多少次?例如,我要列出一个清单,在处理完10个元素之后,我想对它们进行处理。 我考虑过的替代方案可能是: 要么: 是否有更好的方法(就像)来获得到目前为止的迭代次数? 问题答案: pythonic的方法是使用:

  • 问题内容: 在下面的示例代码中,是否真的需要counter = 0,还是有更好,更多的Python方法来访问循环计数器?我看到了一些与循环计数器有关的PEP,但它们要么被延迟要么被拒绝(PEP 212 和PEP 281)。 这是我的问题的简化示例。在我的实际应用程序中,这是通过图形完成的,整个菜单必须每帧重新绘制一次。但这以易于复制的简单文本方式进行了演示。 也许我还应该补充一点,我正在使用Pyt

  • 在循环中,我是否可以对循环使用相同的计数器变量? 或者这些变量会相互影响吗?以下代码应该为第二个循环使用不同的变量,例如,还是可以?

  • 问题内容: 我有这个代码: 它显然不会编译,因为在匿名类中需要使用final。但是我不能将它定下来,因为事实并非如此。你会怎么做?一种解决方案是复制它,但我认为可能会有更好的方法: 编辑 只是为了清楚起见,为了示例,我在这里使用了Runnable,问题实际上是关于匿名类的,它可以是其他任何东西。 问题答案: 我认为您的解决方案是最简单的方法。 另一种选择是将内部类的创建重构为一个为您完成的工厂函数

  • 正如标题所示,我需要做的是使用for循环计算数组的平均值。我所说的平均值是指