web-dev-qa-db-ja.com

インデックスを使用してJavaScriptオブジェクトを反復処理します

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 destructure non-iterable instance

インデックスを持つオブジェクトをループする方法に関するアイデアはありますか?ありがとう

13
londonfed

これはjonas wのソリューションへの追加であることを意味します。

現在の値のキーが必要な場合:

const object = {a:2, b:4, c:6, d:8};

for (const [index, [key, value]] of Object.entries(Object.entries(object))) {
  console.log(`${index}: ${key} = ${value}`);
}

Object.entries(object).forEach(([key, value], index) => {
  console.log(`${index}: ${key} = ${value}`);
});

もちろん、いつでもkeyを省略できます。

const object = {a:2, b:4, c:6, d:8};

for (const [index, [, value]] of Object.entries(Object.entries(object))) {
  console.log(`${index}: ${value}`);
}

Object.entries(object).forEach(([, value], index) => {
  console.log(`${index}: ${value}`);
});
14
PeterMader

単にインデックスを数える:

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()){
 //...
}

または:

for(let [index,value] of Object.values(object).entries()){
  //...
}

しかし、なぜあなたが単純なforEachを使わないのか分かりませんか?:

Object.values(obj).forEach((value, index)=> /*...*/);
6
Jonas Wilms