1. ホーム
  2. javascript

[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?

2022-03-17 22:45:52

質問

以下のようなJavaScriptオブジェクトがあります。

var p = {
    "p1": "value1",
    "p2": "value2",
    "p3": "value3"
};

ここで、すべての p 要素 ( p1 , p2 , p3 ...) そして、それらのキーと値を取得します。どうすればいいのでしょうか?

必要であれば、JavaScriptオブジェクトを修正することができますね。私の最終的な目標は、いくつかのキーと値のペアをループすることで、可能なら eval .

解決方法は?

を使用することができます。 for-in ループを使用します。ただし、取得するキーがオブジェクトの実際のプロパティであり、プロトタイプから来るものではないことを確認する必要があります。

以下はそのスニペットです。

var p = {
    "p1": "value1",
    "p2": "value2",
    "p3": "value3"
};

for (var key in p) {
    if (p.hasOwnProperty(key)) {
        console.log(key + " -> " + p[key]);
    }
}

Object.keys()の代替となるものです。

var p = {
    0: "value1",
    "b": "value2",
    key: "value3"
};

for (var key of Object.keys(p)) {
    console.log(key + " -> " + p[key])
}

を使用していることに注意してください。 for-of の代わりに for-in を使用しない場合、名前付きプロパティでは未定義を返します。 Object.keys() は、プロトタイプチェーン全体のプロパティを使用せずに、オブジェクト自身のプロパティのみを使用することを保証します。

新しい Object.entries() メソッドを使用します。

注意事項 この方法は、Internet Explorerではネイティブにサポートされていません。古いブラウザの場合は、Polyfillの使用を検討してください。

const p = {
    "p1": "value1",
    "p2": "value2",
    "p3": "value3"
};

for (let [key, value] of Object.entries(p)) {
  console.log(`${key}: ${value}`);
}