1. ホーム
  2. javascript

[解決済み] JavaScriptのオブジェクトを反復処理する方法は?

2022-03-18 17:19:39

質問

JavaScriptでオブジェクトを持っています。

{
    abc: '...',
    bca: '...',
    zzz: '...',
    xxx: '...',
    ccc: '...',
    // ...
}

を使いたいのですが for ループでプロパティを取得します。そして、私はそれを部分的に反復したいのです(一度にすべてのオブジェクトのプロパティではありません)。

単純な配列であれば、標準的な for ループを使用します。

for (i = 0; i < 100; i++) { ... } // first part
for (i = 100; i < 300; i++) { ... } // second
for (i = 300; i < arr.length; i++) { ... } // last

しかし、オブジェクトでそれを行うにはどうしたらよいのでしょうか。

どのように解決するのですか?

ほとんどのオブジェクトでは for .. in :

for (let key in yourobject) {
  console.log(key, yourobject[key]);
}

ES6 では、キーと値の両方が同時に必要な場合、次のようにします。

for (let [key, value] of Object.entries(yourobject)) {
    console.log(key, value);
}

継承したプロパティをログに残さないようにするには hasOwnProperty :

for (let key in yourobject) {
   if (yourobject.hasOwnProperty(key)) {
      console.log(key, yourobject[key]);
   }
}

を確認する必要はありません。 hasOwnProperty 単純なオブジェクト (たとえば {} ).

このMDNドキュメント は、オブジェクトとそのプロパティの扱い方について、より一般的に説明しています。

もしあなたが、quot;in chunks"をしたいのであれば、配列でキーを抽出することがベストです。順番は保証されないので、これが正しい方法です。モダンブラウザでは

let keys = Object.keys(yourobject);

より親和性を高めるには、こうするのがよいでしょう。

 let keys = [];
 for (let key in yourobject) {      
     if (yourobject.hasOwnProperty(key)) keys.push(key);
 }

次に、インデックスによってプロパティを反復処理します。 yourobject[keys[i]] :

for (let i=300; i < keys.length && i < 600; i++) { 
   console.log(keys[i], yourobject[keys[i]]);
}