Javascript 访问循环内部的ES6数组元素索引

Javascript 访问循环内部的ES6数组元素索引,javascript,ecmascript-6,for-of-loop,Javascript,Ecmascript 6,For Of Loop,我们可以使用for of循环访问数组元素: for (const j of [1, 2, 3, 4, 5]) { console.log(j); } 如何修改此代码以访问当前索引?我想使用forEach和in的语法来实现这一点。使用: for(常量索引为[1,2,3,4,5].keys()){ 控制台日志(索引); }如果同时需要索引和值,则返回索引和值: for (let [index, value] of array.entries()) { } 在html/js上下文中,在现代

我们可以使用for of循环访问数组元素:

for (const j of [1, 2, 3, 4, 5]) {
  console.log(j);
}
如何修改此代码以访问当前索引?我想使用forEach和in的语法来实现这一点。

使用:

for(常量索引为[1,2,3,4,5].keys()){
控制台日志(索引);
}
如果同时需要索引和值,则返回索引和值:

for (let [index, value] of array.entries()) {

}

在html/js上下文中,在现代浏览器上,对于数组以外的其他iterable对象,我们也可以使用[iterable].entries():


对于那些使用非
数组
或类似数组的对象的用户,您可以轻松构建自己的iterable,这样您仍然可以使用
For of
来处理
localStorage
等真正只有
长度的对象:

函数索引器(长度){
var输出=新对象();
var指数=0;
输出[Symbol.iterator]=函数(){
返回{next:function(){
返回(索引<长度){value:index++}:{done:true};
}};
};
返回输出;
}
然后给它输入一个数字:

for(让索引器的索引(localStorage.length))
console.log(localStorage.key(index))
for循环的遍历数组,而indexof属性获取与数组匹配的索引的值。
P.D这种方法在数字方面有一些缺陷,因此在这个充斥着华而不实的新本地函数的世界中,我们有时会忘记基本的功能

for (let i = 0; i < arr.length; i++) {
    console.log('index:', i, 'element:', arr[i]);
}
for(设i=0;i
干净、高效,您仍然可以
打破循环。奖金!您也可以从末尾开始,然后使用
i--
向后走


附加说明:如果您在循环中大量使用该值,您可能希望执行
const value=arr[i]位于循环的顶部,便于阅读。

for..of
循环中,我们可以通过
array.entries()
实现这一点<代码>数组。条目
返回一个新的数组迭代器对象。迭代器对象知道如何一次从一个iterable对象访问项,同时跟踪其在该序列中的当前位置

在迭代器上调用
next()
方法时,将生成键值对。在这些键值对中,数组索引是键,数组项是值

让arr=['a','b','c'];
让迭代器=arr.entries();
console.log(iterator.next().value);//[0,'a']

console.log(iterator.next().value);//[1,'b']
es6
for…in

for(const index in [15, 64, 78]) {                        
    console.log(index);
}

另一种方法是使用
Array.prototype.forEach()
as

Array.from({
长度:5
},()=>Math.floor(Math.random()*5)).forEach((val,index)=>{
console.log(val,index)

})
如果您需要索引,您也可以自己处理索引,如果您需要键,它将不起作用

let i = 0;
for (const item of iterableItems) {
  // do something with index
  console.log(i);

  i++;
}

您还可以使用JavaScript解决您的问题

迭代(项、索引){
log(`${item}有索引${index}`);
//做你想做的。。。
}
readJsonList(){
forEach(this.iterate);
//它可以是任何数组列表。

}
只需在循环之前创建一个变量并分配一个整数值

let索引=0

然后使用到循环范围中

index+=1

就这样,检查下面的代码片段示例

let索引=0;
对于[1,2,3,4,5]的常数j){
指数+=1;
console.log('index',index);

}
使用TypeScript:“TS2495:Type IterableIterator不是数组类型或字符串类型”。看起来这个问题会解决:也不支持Internet Explorer。不好。抛出一个错误,例如
document.styleSheets[0].cssRules.entries()
或甚至
document.styleSheets.entries()
和许多其他DOM可移植结构。仍然必须使用lodash中的
\ucode.forEach()
史蒂文:如果不需要索引,只需对(document.styleSheets的var值){}
执行
。如果您确实需要索引,您可以首先通过
array.from
for(让[index,value]of array.from(document.styleSheets)){}
将值转换为数组。这很好<代码>数组。从有人想知道的FTWIn案例来看,我用
.entries()
测试了
的of
,与
.forEach()
相比,它的速度慢了一倍@K48很高兴知道,如果您想在es中拥有最快的速度,请使用“反向for循环”:不幸的是,我需要从嵌套循环中屈服。无法使用forEach,因为该函数为
yield
关键字创建范围问题。但是我需要访问我的用例的索引,所以。。。基本的旧
循环,我想是的。@KyleBaker和带有
.entires()
的for-of循环有什么问题?相反,可以反向循环缓存长度。当您能够处理流而不在RAM中创建大数组时,对于iterable处理非常有用。循环速度不会成为瓶颈,因为在这种情况下会有I/O延迟。是的。好的,清晰简单。哦,这样你就有了一个超级简单的方法来访问数组的键/索引。顺便说一句,如果没有(-1),条件应该是->for(让i=0;ibreak
a
for of
for(让[index,value]of array.entries())
更容易阅读。倒退就像添加
.reverse()
一样简单。我认为这是一个完全可以接受的答案。这永远不会是公认的答案,但它已经帮助了几十个或更多的人寻找这个问题。这就是为什么。这需要O(n^2)时间。在性能不重要的情况下,这仍然不能给出所有正确的结果
for(const index in [15, 64, 78]) {                        
    console.log(index);
}
let i = 0;
for (const item of iterableItems) {
  // do something with index
  console.log(i);

  i++;
}