使用索引在JavaScript对象上迭代
我试图在ES6中循环一个JavaScript对象使用索引在JavaScript对象上迭代,javascript,for-loop,ecmascript-6,Javascript,For Loop,Ecmascript 6,我试图在ES6中循环一个JavaScript对象 for (let [value, index] of object) { do something with rest if (index >= 1) { // do something with first item } } 它工作正常,但当我尝试使用索引获取第一项时,它会在控制台中返回一个错误: Uncaught TypeError: Invalid attempt to destructu
for (let [value, index] of object) {
do something with rest
if (index >= 1) {
// do something with first item
}
}
它工作正常,但当我尝试使用索引获取第一项时,它会在控制台中返回一个错误:
Uncaught TypeError: Invalid attempt to destructure non-iterable instance
关于如何使用索引在对象上循环有什么想法吗?谢谢只需计算索引:
let index = 0;
for (let value of object) {
//do something with rest
if (index >= 1) {
// do something with the third and following items
}
index++;
}
或者,如果您真的想使用对象分解(我不知道为什么),它会有点复杂:
let entries = Object.entries(object);
for(let [index, [key, value]] of entries.entries()){
//...
}
或:
但我不知道你为什么不使用简单的forEach
Object.values(obj).forEach((value, index)=> /*...*/);
这只是jonas w解决方案的一个补充
如果需要当前值的键:
const object={a:2,b:4,c:6,d:8};
for(Object.entries(Object.entries(Object))的常量[index、[key、value]]{
log(`${index}:${key}=${value}`);
}
Object.entries(Object.forEach)([key,value],index)=>{
log(`${index}:${key}=${value}`);
});你好,乔纳斯,谢谢你的回答。但我希望在ES6中有一种更干净、更整洁的方法来做到这一点。@londonfed舒尔有几种方法。好吧,简单的forEach听起来是最好的方法。感谢againDo,您意识到属性没有特定的顺序,所以索引对于对象的属性来说真的没有任何意义?我怀疑这是做任何你想做的事情的错误方式。您可以使用Object.keys()
获取一个属性名数组,然后对其进行迭代,然后会有一个索引,不过这可能没有什么意义。感谢您的深入了解。如果需要获取第一项,我将尝试将对象更改为听起来更符合逻辑的数组。是的,数组更有意义,然后您的for/of
循环将根据您的需要工作。您的对象是什么?请发布引发此错误的整个代码(它表明您的对象
可编辑,但元素不可编辑)。
Object.values(obj).forEach((value, index)=> /*...*/);